我有像 "(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]\))
不用说,你应该用matches
来匹配,而不是find
。
关于java - 如何在 Java 中匹配一串元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58902118/