[英]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.