Regex 让问题识别数字模式
我是新来的正则表达式和我有一些困难的时候,试图检测一个模式 我想识别一个介于4000-4999之间的数字,但同时不能在前面或后面跟有另一个可选字符空格或连字符“-”的数字 例如: 4567(比赛) 我有4999朵玫瑰(匹配) 1234567天过去了(没有匹配) 我的供水账户是123456789(不匹配) 你好,我的手机号码是123-4567-89(不匹配) 我试过下面的模式Regex 让问题识别数字模式,regex,regex-lookarounds,Regex,Regex Lookarounds,我是新来的正则表达式和我有一些困难的时候,试图检测一个模式 我想识别一个介于4000-4999之间的数字,但同时不能在前面或后面跟有另一个可选字符空格或连字符“-”的数字 例如: 4567(比赛) 我有4999朵玫瑰(匹配) 1234567天过去了(没有匹配) 我的供水账户是123456789(不匹配) 你好,我的手机号码是123-4567-89(不匹配) 我试过下面的模式 (?<!(\d))\b4\d{3}\b(?!(\d)) (? 但它仍然为我提供了123 4567的匹配项-我想\b
(?<!(\d))\b4\d{3}\b(?!(\d))
(?
但它仍然为我提供了123 4567的匹配项-我想\b有什么特别之处
如有任何建议,将不胜感激
谢谢,
Eric如何使用正向前瞻
和正向前瞻
以及[^]
?我认为它可以得到你想要的结果
模式:
(?<=^|[^\d]{2})4[0-9]{3}(?=$|[^\d]{2})
(?您可以使用
(?<!\d[\s-]|\d)4\d{3}(?![\s-]?\d)
或者,如果不支持不同长度的交替(如在Boost或Python中),请使用
(?
请参见和(和a)
详细信息
(?/(?/)(?-不允许有数字和空格/-
,也不允许有数字紧靠当前位置的左边
4\d{3}
-4
和任意3位数字
(?![\s-]?\d)
-紧靠右侧,不允许出现带数字的空格/-
注意上述解决方案不依赖于单词边界,甚至可能在下划线之间和粘在单词上时匹配。如果你真的想避免这种情况,那么你需要尽一切办法使用单词边界,例如(?。,考虑到空格或连字符“-”,你到底指的是什么“考虑到”?Hi CertainPerformance,我的意思是空格或连字符可能存在,也可能不存在,我可能应该将其改为“可选”谢谢。整个模式是否需要匹配4位数字,或者一个子组是否可以匹配工作?(我问的原因是可选空格或连字符具有非固定宽度的后视功能)\b
是(^\w |\w$|\w\w |\w\w)
。对于“123 4567”\b
匹配空间和4之间的“垂直边界”(以及3和空间之间的“垂直边界”)。因此(?确实会得到匹配,因为\b4
前面是一个空格,而不是数字。更正:(?查找问题:如果4位数字在一行的开头,这将不起作用。(例如1234天过去了
)此外,如果4位数字前的两个字符是数字后接数字或破折号以外的其他字符,则该字符将不匹配,即使它应该匹配。@CertainPerformance我编辑了代码,使其与行首匹配。感谢您的注释。至于第二点,尽管可能,但可能性不大。
(?<!\d[\s-]?)4\d{3}(?![\s-]?\d)
(?<!\d[\s-])(?<!\d)4\d{3}(?![\s-]?\d)