我需要以“数字-数字”格式查找数字范围。该数字应在0-3000范围内。所以我想出了这个正则表达式
match = re.search(r'^[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]-[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]',sentence)
当我运行该程序时,我只想提取句子中的56-900,但是该程序还提取了其他数字,例如2016,CLP2012等。我只想提取中间带有“-”的数字。我的模式有什么问题。
最佳答案
如果要匹配整数范围,则需要使用r“ \ b”(字符串的开头/结尾)来保护匹配项:
>>> import re
>>> text = "2016, CLP2012 56-900 3000-3000 4000-4000 123-123 0-0"
>>> re.findall(r"\b\d+-\d+\b", text)
['56-900', '3000-3000', '4000-4000', '123-123', '0-0']
如果只想匹配0到3000之间的整数,则需要更精确的RegEx,如下所示:
>>> r = r"(?:3000|[1-2]\d{3}|[1-9]\d{2}|[1-9]\d|\d)"
>>> re.findall(r"\b" + r + "-" + r + r"\b", text)
['56-900', '3000-3000', '123-123', '0-0']
关于python - python中数字范围的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46642268/