3 回答

TA貢獻1772條經驗 獲得超5個贊
您可以編寫一個不需要交替的正則表達式,并且只能擁有一個您可以唯一訪問的組以獲取值,如果您使用積極的環顧四周來使用此正則表達式捕獲您的預期值,則效果會更好,
(?<=[([])[^()[\]]*(?=[)\]])
解釋:
(?<=[([])- 正面看后面確保前面的字符是(或者[
[^()[\]]*- 匹配除左括號或右括號外的任何字符
(?=[)\]])- 積極向前看,以確保它匹配)或]
演示
示例 Java 代碼,
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("(?<=[(\\[])[^()\\[\\]]*(?=[)\\]])");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group());
}
印刷,
xxxxx
yyyyy
或者,就像我上面提到的那樣,您可以使用這個非環顧正則表達式并僅捕獲 group1 來獲取您的內容,因為這個正則表達式沒有任何交替,因此只有一個組。
[([]([^()[\]]*)[)\]]
沒有環視正則表達式的演示
帶有非環視正則表達式的示例 Java 代碼,您需要在其中捕獲使用group(1)
String s = "Example_(xxxxx)_AND_(yyyyy)_2019-01-28";
Pattern p = Pattern.compile("[(\\[]([^()\\[\\]]*)[)\\]]");
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println(m.group(1));
}
印刷,
xxxxx
yyyyy

TA貢獻1877條經驗 獲得超1個贊
這是一個完整的例子。
public class ExtractContentExample {
private static final Pattern PATTERN2 = Pattern.compile("^[^\\(]{0,}\\(|([\\)][^\\(\\)]{1,}[\\(])|\\)[^\\)]{0,}$");
public void test22212 () {
String[] split = PATTERN2.split("(I )Comparison_(am )_AND_(so )_2019-01-28Comparison_(handsome!)");
for (int i = 0; i< split.length; i++) {
if (split[i] != null && !split[i].isEmpty()) {
System.out.println(split[i]);
}
}
}
}
我希望這個能幫上忙
添加回答
舉報