如何在Java中匹配元组字符串?
我有像如何在Java中匹配元组字符串?,java,regex,string,Java,Regex,String,我有像“(C,D)(E,F)(G,H)(J,K)和(C,D)(E,F)(G,H)(J,K)或”((C,D)(E,F)(G,H)(J,K)。如果正则表达式匹配第一个字符串中的模式(这是一个由一个空格分隔的一个元组或一系列元组),如何返回true。我尝试了类似“(\(\([a-Z],[a-Z]\)[;$)+)”,但它不会捕获最后一对元组。如果是第二个和第三个字符串,它应该返回false。如果要匹配一个由逗号分隔的大写字母组成的括号对字符串,每对之间只有一个空格,可以使用如下模式: ^\\([A-Z]
“(C,D)(E,F)(G,H)(J,K)
和(C,D)(E,F)(G,H)(J,K)
或”((C,D)(E,F)(G,H)(J,K)
。如果正则表达式匹配第一个字符串中的模式(这是一个由一个空格分隔的一个元组或一系列元组),如何返回true。我尝试了类似“(\(\([a-Z],[a-Z]\)[;$)+)”
,但它不会捕获最后一对元组。如果是第二个和第三个字符串,它应该返回false。如果要匹配一个由逗号分隔的大写字母组成的括号对字符串,每对之间只有一个空格,可以使用如下模式:
^\\([A-Z],[A-Z]\\)( \\([A-Z],[A-Z]\\))*$
也就是说:字母、逗号、字母全部放在括号内,后面是零个或多个类似的插入式表达式,每个表达式前面都有一个空格。如果要匹配一组括号内逗号分隔的大写字母,每对之间只有一个空格,可以使用如下模式:
^\\([A-Z],[A-Z]\\)( \\([A-Z],[A-Z]\\))*$
也就是说:字母、逗号、字母全部放在括号中,后面是零个或多个类似的插入式表达式,每个表达式前面都有一个空格。这里是正则表达式的问题:
(\([A-Z],[A-Z]\)[ |$])+?
^^^^^
你以为这意味着“空格或字符串的结尾”,是吗?它实际上意味着“空格或
或美元符号”。许多特殊字符在放入字符类时会失去其特殊意义
您应该将其替换为(?:|$)
。此外,末尾的+?
应该是贪婪的+
:
(\([A-Z],[A-Z]\)(?: |$))+
就我个人而言,我真的不喜欢这种“空格或字符串结尾”的东西。我更喜欢重复元组模式(特别是当重复模式不长时):
不用说,您应该使用
匹配
,而不是查找
这里是您的正则表达式的问题:
(\([A-Z],[A-Z]\)[ |$])+?
^^^^^
你以为这意味着“空格或字符串的结尾”,是吗?它实际上意味着“空格或
或美元符号”。许多特殊字符在放入字符类时会失去其特殊意义
您应该将其替换为(?:|$)
。此外,末尾的+?
应该是贪婪的+
:
(\([A-Z],[A-Z]\)(?: |$))+
就我个人而言,我真的不喜欢这种“空格或字符串结尾”的东西。我更喜欢重复元组模式(特别是当重复模式不长时):
不用说,您应该使用
匹配
,而不是查找
我想,您可能可以通过以下方法来实现:
\s*|\(([^()\r\n]+)\)
如果模式不返回空字符串,则将为false
输出
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配
来源
我想,您可以通过以下方式实现:
\s*|\(([^()\r\n]+)\)
如果模式不返回空字符串,则将为false
输出
如果您希望简化/修改/探索表达式,已在的右上面板中进行了说明。如果您愿意,还可以在中查看它如何与一些示例输入匹配
来源
为什么要使用惰性版本的
+
而不是急切版本?如果您编写+?
它将只匹配满足表达式所需的数量,而不是全部。为什么要使用惰性版本的+
而不是急切版本?如果您编写+?
它将只匹配必须匹配的数量匹配以满足表达式而不是全部表达式。