繁体   English   中英

为什么提供的正则表达式返回true?

[英]Why does this provided regular expression return true?

我想知道为什么以下正则表达式返回true:

reg = re.compile (r'[0-9]%')
reg.search ("50%")

[0-9]将匹配任何单个数字,在这种情况下为5。但是0不匹配%,因此它应返回false,但返回true。

我的代码可能有语法错误,但是您可以理解。

reg.search()会在字符串中的任何位置匹配模式(因此它匹配0%)。 如果您希望整个字符串都匹配,请尝试以下操作:

re.compile(r'^ [0-9]%$')

^-匹配字符串的开头

$-匹配字符串的结尾

此正则表达式将匹配50%0%部分。

如果要在较长的字符串中搜索个位数百分比,则可以在后面使用负数

In [171]: print(re.search('(?<!\d)\d%',"Foo is 5% complete"))
<_sre.SRE_Match object at 0xab302f8>

In [172]: print(re.search('(?<!\d)\d%',"Foo is 50% complete"))
None

In [173]: print(re.search('(?<!\d)\d%',"5% complete"))
<_sre.SRE_Match object at 0xab301a8>

In [174]: print(re.search('(?<!\d)\d%',"50% complete"))
None

正如gfdunn2所提到的,它对整个字符串进行“滚动匹配”。 您可以做一些事情来控制它更好一些。

下面的花括号{}可以控制您获得多少个字符,因此它将使您的匹配更加紧密。

>>> import re  

#exactly 1 digit and %
>>> test = re.compile(r'[0-9]{1}%')  
>>> print test.search("50%").group(0)  
0%  


#exactly 2 digits and %
>>> test = re.compile(r'[0-9]{2}%')  
>>> print test.search("50%").group(0)  
50%  


#one or more digits  
>>> test = re.compile(r'[0-9]+%')  
>>> print test.search("50%").group(0)  
50%  

#in the event you want to include floating point percentages  
>>> test = re.compile(r'[0-9.]+%')  
>>> print test.search("50.4%").group(0)  
50.4%

>>> print test.search("50.34%").group(0)
50.34%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM