Python正则表达式可匹配任意数量的数字,且不能紧跟句号

时间:2019-07-05 16:40:09

标签: python regex

我有一个多行字符串列表。如果这些字符串的第一行以可变数量的数字开头,而不是立即跟一个句点,则我想对其进行匹配。

例如,一个列表可能是

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']

2 个答案:

答案 0 :(得分:2)

您需要提前(?![.\d])

r"^\d+(?![.\d])"

请参见regex demo。详细信息:

  • ^-字符串的开头
  • \d+-1个以上数字
  • (?![.\d])-当前位置的右边不允许有点和任何其他数字。

请参见Python demo

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"

答案 1 :(得分:0)

我的猜测是,也许这可能是我们可能要输出的内容:

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))

Demo