2014-11-06 2 views
3

문자열에서 일부 값을 가져 오기 위해 정규 표현식을 사용해야합니다. 그것은 나를 위해 매우 복잡하다는 것입니다.문자열에서 정규 표현

예를 들어 나 문자열 같이 가지고

oneWord [first, second, third] 

내 출력 같아야

first 
second 
third 

그래서 난 사이 [및] 단어가 필요하다. 게다가 [] 사이에는 다른 단어 수가있을 수 있습니다.

몇 가지 정규식 크리에이터를 사용하여 시도,하지만 그건 아주 정확하지 않았다 :

String re1=".*?"; // Non-greedy match on filler 
String re2="(?:[a-z][a-z]+)"; // Uninteresting: word 
String re3=".*?"; // Non-greedy match on filler 
String re4="((?:[a-z][a-z]+))"; // Word 1 
String re5=".*?"; // Non-greedy match on filler 
String re6="((?:[a-z][a-z]+))"; // Word 2 
String re7=".*?"; // Non-greedy match on filler 
String re8="((?:[a-z][a-z]+))"; // Word 3 
+0

입력이 'oneWord [first, second, third] foo bar [foobar]'인 경우 예상되는 출력은 무엇입니까? –

답변

4

난 그냥 한 줄에, 이런 식으로 할 것 :

String[] words = str.replaceAll(".*\\[|\\].*", "").split(", "); 

첫 번째 replaceAll() 콜 스트립 오프 선행 및 후행 래퍼 및 split()는 남은 단어를 분리 된 단어로 나눕니다.

+0

@AvinashRaj 아니,하지만 그 질문은 아닙니다. 작은 수정을하면 작동 할 수 있습니다. – Bohemian

2

당신은 아래 정규식을 시도하고 그룹 인덱스 1

(?:\[|(?<!^)\G),? *(\w+)(?=[^\[\]]*\]) 

DEMO에서 원하는 단어를 얻을 수

자바 정규식이 될 것

(?:\\[|(?<!^)\\G),? *(\\w+)(?=[^\\[\\]]*\\]) 

예 :

String s = "oneWord [first, second, third] foo bar [foobar]"; 
Pattern regex = Pattern.compile("(?:\\[|(?<!^)\\G),? *(\\w+)(?=[^\\[\\]]*\\])"); 
Matcher matcher = regex.matcher(s); 
while(matcher.find()){ 
     System.out.println(matcher.group(1)); 
} 

출력 :

first 
second 
third 
foobar 
0

이 문자열을 사용해야합니다.

문자열 [] 즉 str.replaceAll = (| ','\ [\].. "") .split (",");

희망이 있습니다.

0

방법 분할로 쉽게 할 수 있습니다.

String string = [first, second, third]; 
String[] parts = string.split(","); 
String part1 = parts[0]; // first 
String part2 = parts[1]; // second 
String part3 = parts[2]; // third 

정규식을 디버그한다고 알려주십시오.