我试图形成一个正则表达式,如果它在字符串中,它将捕获<expression1>
,否则将捕获<expression2>
。你知道吗
我尝试了一些类似于:(IF)(?(1)THEN|ELSE)
的东西,这意味着捕获将是IFTHEN
(如果IF
被找到)或ELSE
(如果IF
没有找到)
例如:
(apple1\d)(?(1)|apple2\d)
案例1:
对于字符串:pear33 apple14 apple24 orange22 orange44
结果是:apple14
案例2:
与字符串相反:pear33 apple24 orange22 orange44
结果是:apple24
(因为没有apple1
它将捕获apple2\d
)
我的正则表达式在case1中运行良好,它返回apple14
,但是ELSE
不起作用。对于case2,我希望它返回apple24
首先,我不确定为什么您需要一个if-else语句(请参阅我的答案的第2版),但我将尝试提供一些解决方案。你知道吗
所以,对我来说,@Barmer的解决方案(If-Then-Else regex statement)给了我
error: bad character in group name
,尽管我确信适当的调整可能是最佳的解决方案。你知道吗在他回来之前,你可以试试这些(尽管搜索.组()和搜索.groups()关于他们对抓捕组的处理/缺乏抓捕组,确实让我有点恼火)
是的。你知道吗
版本1:基于上述解决方案的超特定版本。我认为我的解决方案不可取。
第2版和第3版:在我看来,这是一个更好、更具可扩展性的版本。我知道第二版。不过,这个解决方案可能会导致内存占用,但对于短字符串,它可以正常工作
编辑:使用search()而不是findall()
第二个例子:
输出:
搜索字符串中没有“if”
输出:
第一个例子
输出:
用途:
IF
部分应该是一个前瞻性的,因此当采用ELSE
分支时,它不包括在匹配需求中。你知道吗如果不想重复
THEN
中的IF
表达式,可以使用backreference。你知道吗相关问题 更多 >
编程相关推荐