[英]Python regex match any number of digits not immediately followed by period
我有一個多行字符串列表。 我希望匹配這些字符串的第一行,如果它們以可變數量的數字開頭而不是緊跟一個句點。
例如,列表可能是
list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
我想要的輸出是42 blabla
。
這段代碼
import re
list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
regex_header = re.compile("^[0-9]+(?!\.).*\n")
for str in list:
print(re.findall(regex_header, str))
輸出
['42. blabla \n']
['42 blabla \n']
['422. blabla \n']
這個只適用於字符串開頭的兩個數字:
import re
list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
regex_header = re.compile("^[0-9]{2}(?!\.).*\n")
for str in list:
print(re.findall(regex_header, str))
輸出:
[]
['42 blabla \n']
['422. blabla \n']
你需要(?![.\\d])
前瞻:
r"^\d+(?![.\d])"
請參閱正則表達式演示 。 細節:
^
- 字符串的開頭 \\d+
- 1+位數 (?![.\\d])
- 當前位置的右側不允許使用任何點和任何其他數字。 查看Python演示 :
import re
l = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
regex_header = re.compile(r"^[0-9]+(?![.\d])")
for s in l:
if (regex_header.search(s)):
print(s)
# => "42 blabla \n foo"
我的猜測是,也許這可能是我們想要輸出的:
import re
list = ["42. blabla \n foo", "42 blabla \n foo", "422. blabla \n foo"]
regex_header = re.compile("^[0-9]+(?!\.)\D*$")
for str in list:
print(re.findall(regex_header, str))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.