试图获得多个数字,即使它在同一行。这是我目前所拥有的
import re lines = ''' 1 2 3 4 G3434343 ''' x = re.findall('^\d{1,2}',lines,re.MULTILINE) print(x)
我得到的输出是:[一、三、四]我想得到的输出是:[一、二、三、四]不知道下一步该怎么做?记住,数字也可以是两位数,这是另一个输入示例
8 9 11 15 G54444
上述输出应为[8,9,11,15]
afdcj2ne1#
您使用^,它将正则表达式锚定到行首。删除它以找到例如"2"。然后你也会从"G3434343"中得到"34",这似乎不是你想要的。所以你需要告诉正则表达式,你需要在数字的前面和后面使用\b。(根据需要调整这个参数,从你的例子中还不清楚你是如何决定你想要的数字的。)然而,\b被解释为一个退格键,没有匹配的字符串,所以你需要将字符串改为一个以"r"开头的原始字符串,或者用另一个反斜杠转义所有的反斜杠。
^
\b
import re lines = ''' 1 2 3 4 G3434343 ''' x = re.findall(r'\b\d{1,2}\b', lines, re.MULTILINE) print(x)
这将打印:["1"、"2"、"3"、"4"]
f2uvfpb92#
您可以尝试查看:
(?<=\s)\d{1,2}(?=\s)
然后将每一行的每个匹配Map为一个整数:
[list(map(int, re.findall('(?<=\s)\d{1,2}(?=\s)', line))) for line in lines]
输出:
[[1,2,3,4], [8,9,11,15]]
查看Python演示here。
2条答案
按热度按时间afdcj2ne1#
您使用
^
,它将正则表达式锚定到行首。删除它以找到例如"2"。然后你也会从"G3434343"中得到"34",这似乎不是你想要的。所以你需要告诉正则表达式,你需要在数字的前面和后面使用
\b
。(根据需要调整这个参数,从你的例子中还不清楚你是如何决定你想要的数字的。)然而,
\b
被解释为一个退格键,没有匹配的字符串,所以你需要将字符串改为一个以"r"开头的原始字符串,或者用另一个反斜杠转义所有的反斜杠。这将打印:
["1"、"2"、"3"、"4"]
f2uvfpb92#
您可以尝试查看:
然后将每一行的每个匹配Map为一个整数:
输出:
查看Python演示here。