簡體   English   中英

Python正則表達式匹配任意數量的數字,而不是緊跟句點

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM