java - 如何在 Java 中匹配一串元组?

标签 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],[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/

相关文章:

java - Hibernate - 从 @ManyToMany 删除查询

java - 棘手的正则表达式 - 只替换第一次出现而不是下一次出现

Javascript 使用正则表达式 trim 链接

c - 如何用 C 语言从文本文件中剪切或截断行

java - 返回类型为void的方法中的return语句有什么意义

Java:如何解压缩内存使用率较低的文件(zip或tar.gz)?

java - 安卓 : Create Service as Independent Project

c# - 替换为通配符

swift - 在 Swift 中函数式反转单词

python - Pandas - 检查数据帧列是否包含键 :value pairs from a dictionary