gpt4 book ai didi

python - 如何在遇到 'character' 时强制正则表达式停止并再次从头开始

转载 作者:行者123 更新时间:2023-12-01 02:38:10 25 4
gpt4 key购买 nike

import re
match = re.findall(r'(a)(?:.*?(b)|.*?)(?:.*?(c)|.*?)(d)?',
'axxxbxd,axxbxxcd,axxxxxd,axcxxx')
print (match)

输出:[('a', 'b', 'c', 'd'), ('a', '', 'c', '')]

我想要如下输出:

[('a','b','','d'),('a','b','c','d'),('a','','','d'),('a','','c','')]

每个列表都以“a”开头,并且包含字符串中的 4 个项目,分别以逗号分隔。

最佳答案

如果您想从分隔字符串中获取多个匹配项,请首先使用分隔符拆分字符串并运行正则表达式,或者替换 .[^<YOUR_DELIMITING_CHARS>] (注意必须转义的 \^]- )。另请注意,您可以使用可选的非捕获组消除模式中的冗余。

请注意,我假设 a , bc是占位符,实际值可以是单字符值也可以是多字符值。

import re
s = 'axxxbxd,axxbxxcd,axxxxxd,axcxxx'
r = r'(a)(?:.*?(b))?(?:.*?(c))?(d)?'
print([re.findall(r, x) for x in s.split(',')])
print ([re.findall(r, x) for x in re.split(r'\W', s)])

# => [('a', 'b', '', ''), ('a', 'b', 'c', 'd'), ('a', '', '', ''), ('a', '', 'c', '')]

请参阅Python demo .

如果您的分隔符是非单词字符,请使用 \W .

import re
s = 'axxxbxd,axxbxxcd,axxxxxd,axcxxx'
r = r'(a)(?:.*?(b)|.*?)(?:.*?(c)|.*?)(d)?'
print([re.findall(r, x) for x in s.split(',')])
print ([re.findall(r, x) for x in re.split(r'\W', s)])
# => [[('a', 'b', '', '')], [('a', 'b', 'c', 'd')], [('a', '', '', '')], [('a', '', 'c', '')]]

请参阅Python demo

如果字符串可以包含换行符,则传递re.DOTALL re.findall 的修饰符来电。

图案详细信息

  • (a) - 第 1 组捕获 a
  • (?:.*?(b))? - 可选的非捕获组匹配以下序列:
    • .*? - 任何字符(如果未使用 re.S/re.DOTALL 修饰符,则换行符除外),出现零次或多次,但尽可能少
    • (b) - 第 2 组:a b
  • (?:.*?(c))?
    • .*? - 任何字符(如果未使用 re.S/re.DOTALL 修饰符,则换行符除外),出现零次或多次,但尽可能少
    • (c) - 第 3 组:a c
  • (d)? - 第 4 组(可选):a d .

关于python - 如何在遇到 'character' 时强制正则表达式停止并再次从头开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46011453/

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