我有一个多行字符串列表。如果这些字符串的第一行以可变数量的数字开头,而不是立即跟一个句点,则我想对其进行匹配。
例如,一个列表可能是
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']
答案 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))