我需要一个正则表达式来匹配以冒号结尾的大写字符串。该字符串可以包含空格、数字和句点。所以如果:
mystring = "I have a C. GRAY CAT2:"
我想要冷融合表达式
REFind("[A-Z0-9. ][:]",mystring)
返回数字 9,匹配“C.GRAY CAT2:”。相反,它返回数字 21,仅匹配冒号。我希望正则表达式的更正能够解决该问题。当然,我尝试过很多很多事情。 谢谢!
最佳答案
我建议使用
[A-Z0-9][A-Z0-9. ]*:
请参阅regex demo
详细信息
[A-Z0-9]
- 大写字母或数字(如果第一个字符可以是数字,则删除0-9
)[A-Z0-9。 ]*
- 零个或多个大写字母/数字、.
或空格:
- 冒号。
变化
要避免匹配 345:
之类的子字符串,但仍允许 23 VAL:
之类的子字符串,请使用
\b(?=[0-9. ]*[A-Z])[A-Z0-9][A-Z0-9. ]*:
参见this regex demo 。这里, \b(?=[0-9. ]*[A-Z])
首先匹配单词边界,然后匹配正向先行 (?=[0-9. ]*[ A-Z])
确保 0+ 个数字、空格或点后面有一个大写字母。
如果您不希望序列开头有数字,即在 I have a 22 C. GREY CAT2:
中,您需要提取 C.灰色 CAT2
,使用 Sebastian's suggestion (demo)。
关于正则表达式查找任何后跟冒号的大写单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46449410/