regex 匹配单行上多个数字的正则表达式

ht4b089n  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(160)

试图获得多个数字,即使它在同一行。
这是我目前所拥有的

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]

afdcj2ne

afdcj2ne1#

您使用^,它将正则表达式锚定到行首。删除它以找到例如"2"。
然后你也会从"G3434343"中得到"34",这似乎不是你想要的。所以你需要告诉正则表达式,你需要在数字的前面和后面使用\b。(根据需要调整这个参数,从你的例子中还不清楚你是如何决定你想要的数字的。)
然而,\b被解释为一个退格键,没有匹配的字符串,所以你需要将字符串改为一个以"r"开头的原始字符串,或者用另一个反斜杠转义所有的反斜杠。

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

f2uvfpb9

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

相关问题