如何在Python中从re.Match中提取第1组匹配

问题描述 投票:0回答:1

我正在编写一个Python脚本,我需要迭代文本文件中的行并提取前面有零个或多个非数字字符的第一个数字。这是示例数据的片段:

5edf6
ghj4opx9wed
k8q6n5z4f7k
swe6hnjk

经过一些实验,我想出了以下正则表达式来实现此目的:

[^0-9]*([0-9])
。这正确地将每行中的第一个数字匹配为Group 1。但是,我在从 re.Match 对象中提取这个匹配的数字时遇到了困难。

这是我到目前为止的代码片段:

import re
first_digit_regit = re.compile(r'[^0-9]*([0-9])')
file_name_path = <MY PATH STRING>
try:
    with open(file_name_path, 'r') as file:
        for line in file:
            digit_match = first_digit_regit.search(line)
            if digit_match is not None:
                first_digit = int(first_digit_match.groups(0)[0]) # ???
                # Further processing...

我不确定从 re.Match 对象中提取 Group 1 的正确方法。我应该考虑使用不同的正则表达式来避免分组吗?

python regex
1个回答
0
投票

无需在第一个数字之前匹配“零个或多个非数字字符”,因为

\d
单独即可匹配第一个数字:

import re
from io import StringIO

file = StringIO('''5edf6
ghj4opx9wed
k8q6n5z4f7k
swe6hnjk''')
for line in file:
    print(re.search(r'\d', line).group(0))

输出:

5
4
8
6
© www.soinside.com 2019 - 2024. All rights reserved.