Regex获取Python中所有可能出现的

2024-04-16 17:52:57 发布

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

我有一个字符串s = '10000', 我只需要使用Python关于芬德尔获取字符串s中有多少0\d0 例如:对于字符串s = '10000',它应该返回2

说明: 第一次出现是10000,第二次出现是10000

我只需要发生多少次,而不感兴趣的发生模式

我尝试了以下正则表达式语句:

re.findall(r'(0\d0)', s) #output: ['000']
re.findall(r'(0\d0)*', s) #output: ['', '', '000', '', '', '']

Finally, if I want to make this regex generic to fetch any number then any_number_included_my_number then the_same_number_again, how can I do it?


Tags: to字符串renumberoutputmakeif模式
1条回答
网友
1楼 · 发布于 2024-04-16 17:52:57

如何获取所有可能的事件?你知道吗

正则表达式

正如我在评论中提到的,您可以使用以下模式:

(?=(0\d0))

工作原理:

  • (?=...)是一个积极的前瞻,确保后面的匹配。这不会消耗字符(允许我们在字符串中的每个位置检查匹配,因为正则表达式会在消耗的字符之后恢复模式匹配)。你知道吗
  • (0\d0)是一个捕获组,匹配0,然后是任意数字,然后是0

代码

您的代码变为:

See code in use here

re.findall(r'(?=(0\d0))', s)

结果是:

['000', '000']

python ^{} method声明如下

If one or more groups are present in the pattern, return a list of groups; this will be a list of tuples if the pattern has more than one group.

这意味着我们的比赛是第一组的结果,而不是很多人所期望的完全比赛。你知道吗


如何概括模式?你知道吗

正则表达式

可以使用以下模式:

(\d)\d\1

工作原理:

  • (\d)将任何数字捕获到捕获组1中
  • \d匹配任何数字
  • \1是一个backreference,它与捕获组1最近匹配的文本匹配

代码

您的代码变为:

See code in use here

re.findall(r'(?=((\d)\d\2))', s)
print([n[0] for n in x])

注意:上面的代码有两个捕获组,因此我们需要将backreference更改为\2以正确匹配。因为我们现在有两个捕获组,所以我们将获取元组作为文档状态,并且可以使用列表理解来获得预期的结果。你知道吗

结果是:

['000', '000']

相关问题 更多 >