如何使用正则表达式遍历字符?

2024-06-03 07:25:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串s1,我想找到所有以ABC开头,以BCD结尾的匹配字符串: 这是我尝试过的,它将返回['ABCDDDCECCCBCDABCVVVBCD']

但是我想要的是:ABCDDDCECCCBCD, ABCVVVBCD实际上有两个匹配的字符串序列 我怎样才能做到这一点? 谢谢!!你知道吗

   s1='AABCDDDCECCCBCDABCVVVBCD'
    t1 ='ABC.*BCD'
    t2 = 'ABC.*CEC'

我想得到所有符合条件的字符串,即从ABD开始,以BCD结束,从ABC开始,以CEC结束。 所以预期的结果是ABCDDDCEC, ABCVVVBCD它不应该返回abcdddceccbcd


Tags: 字符串结尾序列t1abccect2s1
1条回答
网友
1楼 · 发布于 2024-06-03 07:25:18

正则表达式中有两个问题。你知道吗

  • 你有.*,它贪婪地捕捉所有的东西,并且会尽可能多地捕捉,这会耗尽ABCsomethingBCD的任何序列
  • 您有$字符串结束锚点,它强制字符串匹配到行尾。你知道吗

您可以使用这个正则表达式,其中匹配从ABC开始,然后通过非贪婪正则表达式捕获尽可能少的内容.*?,然后匹配BCD,并且由于没有$字符,所以在行尾之前不会强制匹配。注意,即使将.*更改为.*?,并且不从regex中删除$,在行尾之前仍然只能得到一个匹配,这是因为.*?被强制匹配到行尾,因为regex中存在$字符。修正使行为符合预期。你知道吗

ABC.*?BCD

Python演示

import re

s1='AABCDDDCECCCBCDABCVVVBCD'
t1 ='ABC.*?BCD'
re.findall(t1,s1)

指纹

['ABCDDDCECCCBCD', 'ABCVVVBCD']

如果您的字符串是AABCDDDCECCCABCVVVBCD,并且在BCD之前您不想匹配字符串中的第二个ABC,您可以使用这个基于tempered greedy token的regex

ABC(?:(?!ABC).)*BCD

Regex Demo

编辑2: 对于给定的字符串AABCDDDCECCCABCVVVBCD,您希望根据您的后期编辑获得这两个匹配项

ABCDDDCEC and ABCVVVBCD

你可以用这个正则表达式

ABC.*?(?:CEC|BCD)

Regex Demo

相关问题 更多 >