gpt4 book ai didi

Python:非捕获组在正则表达式中不起作用

转载 作者:行者123 更新时间:2023-12-04 15:21:11 25 4
gpt4 key购买 nike

我在正则表达式中使用非捕获组,即 (?:.*) 但它不起作用。

我仍然可以在结果中看到它。如何忽略它/不在结果中捕获?

代码:

import re

text = '12:37:25.790 08/05/20 Something P LR 0.156462 sccm Pt 25.341343 psig something-else'

pattern = ['(?P<time>\d\d:\d\d:\d\d.\d\d\d)\s{1}',
'(?P<date>\d\d/\d\d/\d\d)\s',
'(?P<pr>(?:.*)Pt\s{3}\d*[.]?\d*\s[a-z]+)'
]

result = re.search(r''.join(pattern), text)

输出:

>>> result.group('pr')

'Something P LR 0.156462 sccm Pt 25.341343 psig'

预期输出:

'Pt   25.341343 psig'

更多信息:

>>> result.groups()

('12:37:25.790', '08/05/20', 'Something P LR 0.156462 sccm Pt 25.341343 psig')

最佳答案

量词在命名组内,你必须把它放在外面,并可能让它不贪心。

更新后的模式可能是这样的:

(?P<time>\d\d:\d\d:\d\d.\d\d\d)\s{1}(?P<date>\d\d/\d\d/\d\d)\s.*?(?P<pr>Pt\s{3}\d*[.]?\d*\s[a-z]+)

请注意,在当前模式下,数字是可选的,因为所有量词都是可选的。您可以省略 {1}

如果Pt后面的数字不能为空,可以用\d+(?:\.\d+)?更新模式至少匹配一个数字:

(?P<time>\d\d:\d\d:\d\d.\d{3})\s(?P<date>\d\d/\d\d/\d\d)\s.*?(?P<pr>Pt\s{3}\d+(?:\.\d+)?\s[a-z]+)
  • (?P<time>集体时间
  • \d\d:\d\d:\d\d.\d{3}匹配时间格式
  • )\s关闭组并匹配一个空白字符
  • (?P<date>日期
    • \d\d/\d\d/\d\d匹配类似日期的模式
  • )\s关闭组并匹配一个空白字符
  • .*?尽可能匹配除换行符以外的任何字符
  • (?P<pr>pr
    • Pt\s{3}匹配 Pt 和 3 个空白字符
    • \d+(?:\.\d+)?将 1 个以上的数字与可选的小数部分匹配
  • \s[a-z]+匹配一个空白字符 1+ 次字符 a-z
  • )关闭群

Regex demo

关于Python:非捕获组在正则表达式中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63297603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com