我要求结果屏幕在(),[]中显示名称。例如:
(son of X) (Smith),(son of X) Smith
[Son of X] Smith
[Son of X] [Smith]
我想要检索其中的第一个名字。我为第一个字符串尝试了以下正则表达式,但它没有帮助:
String name="(son of x) (Smith)";
Matcher matcher = Pattern.compile("\\(.*\\)\\b").matcher(name);
while (matcher.find() ) {
System.out.println(matcher.group() );
}
有人可以帮助形成正则表达式吗?还请告诉我们如何给出条件或条件?
答案 0 :(得分:0)
您需要使用^
将搜索锚定在字符串的开头,然后匹配(
或[
,然后捕获 0+其他字符,直到第一个)
或]
。
请参阅Java demo:
//String s = "(son of X) (Smith),(son of X) Smith"; // son of X
String s = "[Son of X] Smith"; // Son of X
Pattern pattern = Pattern.compile("^[(\\[](.*?)[\\])]");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group(1));
}
<强>详情:
^
- 字符串开头[(\\[]
- [
或(
(.*?)
- 第1组:除了换行符之外的任何0 +字符尽可能少到第一个字符[\\])]
- )
或]
。