我正在构建一个正则表达式,它将帮助我识别匹配的第一次出现。
我目前的正则表达式为"(.*)[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"
然后我的正则表达式返回"RE: FW: case:-1234: This is in reference to"
,"789"
,"reopening"
。
我希望得到的是"RE: FW: "
,"1234"
,"This is in reference to case 789 reopening"
。
我是正则表达式的新手,所以非常感谢任何帮助。
注意:我正在开发一个基于java的工具,所以java兼容的正则表达式会很好。
答案 0 :(得分: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 :(得分:0)
您错过了?
你的正则表达式是
(?i)(.*?)case[^a-z\d]*(\d+)(.*)
您可以使用正则表达式中的(?i)
切换不区分大小写的匹配