这是一个关于正则表达式的简单问题,但我找不到答案。
我想确定一个数字是否恰好出现两次或四次。我可以使用什么语法?
\d{what goes here?}
我试过了\d{2,4}
,但是这个表达式也接受三个数字。
这是一个关于正则表达式的简单问题,但我找不到答案。
我想确定一个数字是否恰好出现两次或四次。我可以使用什么语法?
\d{what goes here?}
我试过了\d{2,4}
,但是这个表达式也接受三个数字。
abc 123 xyz
什么?是否应该匹配,12
因为顺序恰好是两位数?还是不应该,因为它是一个既不是2也不是4长12
的较大数字序列的一部分123
?如果我不得不猜测,我会认为您想要后者的行为,但您的问题尚不清楚。示例和/或更清晰的说明将有所帮助。同样的问题abc 12345 def
……在那里应该发生什么?
Answers:
没有特定的语法,但是有很多方法可以做到这一点:
(?:\d{4}|\d{2}) <-- alternation: four digits or two
\d{2}(?:\d{2})? <-- two digits, and optionally two more
(?:\d{2}){1,2} <-- two digits, times one or two
\d{2}(?:\d{2})?
解决方案就可以了-其中种类繁多-尤其是最后一个,看起来非常不错且可扩展。
(?:
启动一个“非捕获组”(该组不能在replace语句中引用)。您也可以只使用括号,但是它们将创建捕获组。此处的更多详细信息:stackoverflow.com/questions/3512471/non-capturing-group
"333"
。您可能错误地使用了regex库的“查找匹配子字符串”功能,而不是其“检查是否完整的字符串匹配”功能。您应该查阅其文档。
(?<!\d)(\d{2}|\d{4})(?!\d)
这是正确的方法。接受的答案是错误的。
它将匹配3个数字(或5个数字)。所以这在我眼里是错误的。
1)检查2位数或4位数序列之前或2位数或4位数序列之后没有数字。
(<!)
语法是负面的
(?!)
语法为负先行。
上面的适用于中间字符串:
如果您的搜索字符串周围没有内容,则可以使用^
和$
字符串锚点的开始和结尾:
^\d{4}$|^\d{2}$
(?<!\d)(\d{2}|\d{4})(?!\d)
^\d{4}$|^\d{2}$
将是解决该问题的潜在方法。就像那样^\d{2}(?!\d)|^\d{4}(?!\d)