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

标签 python regex

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

但我想要的是:ABCDDDCECCCBCD, ABCVVVBCD 实际上有两个匹配字符串序列 我怎样才能实现这个目标? 谢谢!!

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

我想获取所有符合从ABD开始、以BCD结束、从ABC开始、以CEC开始的条件的字符串。 因此预期结果是 ABCDDDCEC, ABCVVVBCD 它不应该返回 ABCDDDCECCCBCD

最佳答案

您的正则表达式中有两个问题。

  • 你有.*,它会贪婪地捕获所有内容,并会尽可能多地捕获ABCsomethingBCD的任何序列
  • 您有 $ 字符串结尾 anchor ,它强制字符串匹配到行尾。

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

ABC.*?BCD

Python 演示,

import re

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

打印,

['ABCDDDCECCCBCD', 'ABCVVVBCD']

如果您的字符串是 AABCDDDCECCCABCVVVBCD 并且您不想匹配字符串中的第二个 ABC 直到 BCD,您可以使用这个 tempered greedy token 基于正则表达式,

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

<强> Regex Demo

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

ABCDDDCEC and ABCVVVBCD

您可以使用此正则表达式,

ABC.*?(?:CEC|BCD)

<强> Regex Demo

关于python - 如何使用正则表达式遍历字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55926220/

相关文章:

python - 如何在 Python 中使用正则表达式从同一个字符串中提取多个值?

python - 转义字符串并立即将其分割

python - Pandas - 制作列 dtype 对象或因子

java - 检查字符串中是否存在模式

python - 子字符串在字符串中的位置

regex - 使用Stringr从R中的序列中提取最后4位数字

javascript - 如果域匹配,则将纯 URL 替换为链接

python - 使用 Python 正则表达式在字符之间拆分字符串

javascript - 捕获 flask 应用程序中的所有路径

python - Python 中的线程——我错过了什么?