gpt4 book ai didi

python - If-Then-Else 正则表达式语句

转载 作者:太空狗 更新时间:2023-10-30 02:51:28 26 4
gpt4 key购买 nike

我正在尝试构建一个正则表达式来捕获 <expression1>如果它在字符串中,否则捕获 <expression2> .

我尝试了一些类似的方法:(IF)(?(1)THEN|ELSE) ,这意味着捕获将是 IFTHEN (如果找到 IF)或 ELSE (以防找不到 IF)

例如:

(apple1\d)(?(1)|apple2\d)

案例一:对于字符串:pear33 apple14 apple24 orange22 orange44

结果将是:apple14

案例2:对比字符串:pear33 apple24 orange22 orange44

结果将是:apple24(因为没有 apple1 它将捕获 apple2\d )

我的正则表达式适用于 case1 它返回 apple14然而ELSE不起作用。我希望它返回 apple24对于案例 2

最佳答案

首先,我不确定您为什么需要 if-else 语句(请参阅我的回答的第 2 版),但我会尝试提供一些解决方案。

所以,对我来说,@Barmer 的解决方案 ( If-Then-Else regex statement ) 给了我 error: bad character in group name 尽管我确信适当的调整可能是最佳解决方案。

然而,在他回来之前,您可以尝试这些(尽管 search.group() 和 search.groups() 在处理捕获组/缺少捕获组方面确实让我有点恼火)

.

版本 1:超特定版本,基于上面建议的解决方案。我认为这里的解决方案不可取。

>>> import re


>>> string1 = 'pear33 apple14 apple24 orange22 orange44'
>>> string2 = 'pear33 apple24 apple14 orange22 orange44'


>>> re.findall('(?<!apple[12]\d)[\s]+(apple1\d|apple2\d)', string1)
['apple14']
>>> re.findall('(?<!apple[12]\d)[\s]+(apple1\d|apple2\d)', string2)
['apple24']


>>> re.search('(?<!apple[12]\d)[\s]+(apple1\d|apple2\d)', string1).group()
' apple14'
>>> re.search('(?<!apple[12]\d)[\s]+(apple1\d|apple2\d)', string2).group()
' apple24'

版本 2 和 3:在我看来,更好、更具可扩展性的版本。我对版本 2 不了解。不过,TBH,此解决方案可能会导致内存占用,但对于短字符串,它会正常工作

>>> string1 = 'pear33 apple14 apple24 orange22 orange44'
>>> string2 = 'pear33 apple24 apple14 orange22 orange44'


>>> re.findall('[\S\s]*?(apple[\d]+)[\S\s]*', string1)
['apple14']
>>> re.findall('[\S\s]*?(apple[\d]+)[\S\s]*', string2)
['apple24']


>>> re.findall('(?<!apple\d\d)[\S\s]+?(apple[\d]+)[\S\s]*', string1)
['apple14']
>>> re.findall('(?<!apple\d\d)[\S\s]+?(apple[\d]+)[\S\s]*', string2)
['apple24']

关于python - If-Then-Else 正则表达式语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768087/

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