3

我正在寻找构建一个正则表达式来帮助我识别匹配的第一次出现。

我目前的正则表达式是"(.*)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*)"

我要做的是查找输入字符串是否包含单词“case”(不区分大小写),后跟任意数量的特殊字符,后跟一个数字;我想检索文本的 3 部分。假设我的输入字符串是"RE: FW: case:-1234: there is some description" 使用这个正则表达式,我可以检索到, "RE: FW: ", "1234", "there is some description".

这很好,但如果我的输入字符串是 "RE: FW: case:-1234: This is in reference to case 789 reopening" Then 我的正则表达式返回, "RE: FW: case:-1234: This is in reference to", "789", "reopening"

我想得到的是"RE: FW: ", "1234", "This is in reference to case 789 reopening".

我是正则表达式的新手,所以非常感谢任何帮助。

注意:我正在开发一个基于 java 的工具,所以 java 兼容的正则表达式会很好。

4

2 回答 2

2

您的正则表达式是否必须匹配整个字符串(即它是否使用matches)?如果不是(或者如果您可以选择使用find),只需删除(.*),因为这就是将您的匹配推回的原因:

[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*

否则,使领先的重复不贪婪;

(.*?)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*)

顺便说一句,您可以使用不区分大小写的匹配来简化此操作。如果您无法在工具中激活它,您可以在正则表达式中内联:

(?i)(.*?)case[^a-z\\d]*(\\d+)[^a-z\\d]*(.*)

请注意,我还简化了数字。+表示出现 1 次或多次。

于 2013-07-04T09:44:30.733 回答
0

你失踪了?

你的正则表达式是

(?i)(.*?)case[^a-z\d]*(\d+)(.*)

(?i)您可以使用正则表达式切换不区分大小写的匹配

于 2013-07-04T09:44:29.583 回答