-3

我正在尝试在一个字符串中检查我使用的最多 3 个数字:

regex = re.compile("\d{0,3}")

但这不起作用,例如,1234即使数字字符串长度超过 3,该正则表达式也会接受该字符串。

4

4 回答 4

1

如果要检查字符串中最多 3 位的字符串,则需要使用'\d{4,}',因为您只对长度为 3 的数字字符串感兴趣。

import re

str='123abc1234def12'
print re.findall('\d{4,}',str)

>>> '[1234]'

如果您使用{0,3}

str='123456'
print re.findall('\d{0,3}',str)

>>> ['123', '456', '']

匹配最大长度为 3的regex数字字符串和空字符串,但这不能用于测试正确性。在这里,您无法检查所有数字字符串是否都是长度,但您可以轻松检查长度范围内的数字字符串。

所以要测试做这样的事情:

str='1234'

if re.match('\d{4,}',str):
    print 'Max digit string too long!'

>>> Max digit string too long!
于 2012-12-31T12:25:39.123 回答
0

\d{0}匹配所有可能的字符串。不清楚您所说的“不起作用”是什么意思,但是如果您希望将字符串与数字匹配,请将重复运算符增加到{1,3}.

如果您希望排除 4 次或更多的运行,请尝试类似(?:^|\D)\d{1,3}(?:\D|$)的方法,当然,如果您想捕获匹配,请使用捕获括号\d{1,3}

于 2012-12-31T12:25:39.500 回答
0

可能有几个原因:

  • 由于您想\d搜索数字或数字,您可能应该将其拼写为"\\d"or r"\d""\d"可能碰巧起作用,但这只是因为d在字符串中(还)不是特别的。"\n"or "\f"or"\r"会做一些完全不同的事情。查看re 模块文档并搜索“原始字符串”。

  • "\\d{0,3}"几乎可以匹配任何东西,因为 {0,3} 表示“零或最多三个”。因此,它将匹配任何字符串的开头,因为任何字符串都以空字符串开头。

  • 或者,也许您想搜索只有零到三个数字的字符串,没有别的。在这种情况下,您想使用类似r"^\d{0,3}$". 原因是正则表达式匹配字符串中的任何位置(或者,如果您使用re.match而不是,则仅在开头re.search)。^匹配字符串的开头,并$匹配结尾,因此通过将它们放在每一端,您不匹配任何具有 before 或 after 的内容\d{0,3}

于 2012-12-31T12:28:01.710 回答
0

您使用的方法是查找具有 0-3 个数字的子字符串,它无法达到您的预期。我的解决方法:

>>> import re
>>> re.findall('\d','ds1hg2jh4jh5')
['1', '2', '4', '5']
>>> res = re.findall('\d','ds1hg2jh4jh5')
>>> len(res)
4
>>> res = re.findall('\d','23425')
>>> len(res)
5

所以,接下来你只需要使用'if'来判断数字的数量。

于 2012-12-31T12:34:49.093 回答