繁体   English   中英

python regex,空格之间只有数字

[英]python regex, only digit between whitespaces

我有一些字符串,并且在某些特定的索引下,我想检查下一个字符是否是被一个或多个空格包围的数字。

例如

这是一个字符串

“一些数据\\ n 8 \\ n更多数据”

可以说我正在迭代字符串,当前位于索引8,在该位置,我想知道下一个字符是否为数字,并且只有数字忽略了前后的所有空格。

因此,对于上述特定情况,它应该告诉我True以及如下所示的字符串

'一些数据\\ n(8 \\ n更多数据'

它应该告诉我False

我尝试了以下模式

r'\s*[0-9]+\s*'

但它对我不起作用,可能是我使用不正确。

尝试这个:

(?<=\s)[0-9]+(?=\s)

此正则表达式使用先行查找和后向查找,以便仅在前后字符为空白字符时才与数字匹配。

冗长的形式:

(?<=\s) # match if whitespace before
[0-9]+  # match digits
(?=\s)  # match if whitespace after

您的原始正则表达式无法正常工作,因为“ *”表示“零个或多个匹配项”。 相反,您应该使用“ +”表示“一个或多个匹配项”。 见下文:

>>> import re
>>> s = 'some data \n 8 \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
True
>>> s = 'some data \n 8) \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
>>> s = 'some data \n 8343 \n more data'
>>> if re.search("\s+[0-9]+\s+", s): print True
...
True
>>>

如果只想捕获由一个或多个空格包围的单个数字,请像这样删除“ [0-9]”前面的“ +”:

re.search("\s+[0-9]\s+", s)

没有正则表达式:

s1 = 'some data \n 8 \n more data'
s2 = 'some data \n (8 \n more data'

testString = lambda x: True if len(x.splitlines()[1].strip()) == 1 else False

print testString(s1)
print testString(s1)

输出:

True
False

暂无
暂无

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

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