gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:21 25 4
gpt4 key购买 nike

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

但我想要的是:ABCDDDCECCBCD, ABCVVVBCD 其实有两个匹配字符串序列我怎样才能做到这一点?谢谢!!

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

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

最佳答案

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

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

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

ABC.*?BCD

Python 演示,

import re

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

打印,

['ABCDDDCECCCBCD', 'ABCVVVBCD']

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

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

Regex Demo

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

ABCDDDCEC and ABCVVVBCD

你可以使用这个正则表达式,

ABC.*?(?:CEC|BCD)

Regex Demo

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

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