簡體   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