我正试图找到只有一位数字的句子。
sentence="I'm 30 years old."
print(re.match("[0-9]", sentence)
然后返回
<re.Match object; span=(0, 1), match='3'>
,但实际上是30,是两位数,我不希望它匹配。 似乎每个由3和0组成的数字都被认为是一个独立的数字。 这些数字是我国通常使用的两字节数字。
如何更改我的正则表达式? 谢谢!
答案 0 :(得分:0)
请改用此模式(它寻找一位数字):
import re
print(re.search(r'\b\d\b', "I'm 30 years old."))
输出:
None
这也适用于Python 3中的Unicode字符。要同时考虑标点符号,可以使用\b\d(\b|\.|\?|\!)
答案 1 :(得分:0)
我们可以尝试通过以下模式使用re.search
:
(?=.*\d.*\d).*
这是一个正向的前瞻,如果在字符串中的任何位置出现两个(或更多)数字,则为true。具体来说,我们不希望此模式匹配,以验证您的输入。
sentence="I'm 30 years old."
if not re.search("(?=.*\d.*\d).*", sentence):
print 'match'
else:
print 'no match'
答案 2 :(得分:0)
您应该在后面加上负向后看和反前看,以避免出现在独立数字前后的数字:
re.findall("(?<!\d)\d(?!\d)", "200 20 1 20 200 20 2")
#['1', '2']
re.findall("(?<!\d)\d(?!\d)", "200 20 20 200 20")
#[]
if not re.findall("(?<!\d)\d(?!\d)", "200 20 20 200 20"):
print("no single-digit numbers")
else:
print("some single-digit numbers")
答案 3 :(得分:0)
您的问题有点不清楚,但据我了解,您只想匹配只有一位数字的句子,该句子可以在句子中重复多次,但在任何特定情况下都不应超过一位数字。喜欢,
让我知道这是否是您想要的。如果是的话,您可以使用此正则表达式,
^(?!.*\d\d)(?=.*\d).*$
说明:
^
->字符串开头(?!.*\d\d)
->否定前瞻,可确保句子不包含任何多位数的数字。(?!.*\d\d)
->否定前瞻,可确保句子不包含任何多位数的数字。.*
->匹配任何文本$
->字符串结尾这是示例python代码,
arr= ["I'm 30 years old.","I'm 3 years old.", "I'm 3 years and you are 30 years old.", "I'm 3 years and you are 5 years old.", "I am a good boy."]
for s in arr:
if re.search("^(?!.*\d\d)(?=.*\d).*$", s):
print(s+' --> Sentence has only one digit')
else:
print(s+' --> Sentence has either no digit or more than one digit')
哪个输出
I'm 30 years old. --> Sentence has either no digit or more than one digit
I'm 3 years old. --> Sentence has only one digit
I'm 3 years and you are 30 years old. --> Sentence has either no digit or more than one digit
I'm 3 years and you are 5 years old. --> Sentence has only one digit
I am a good boy. --> Sentence has either no digit or more than one digit