【问题标题】:Python Regular Expression find repeating digitsPython正则表达式查找重复数字
【发布时间】:2012-10-29 07:48:48
【问题描述】:

我有一个 Python 问题,想象下面的变量 x。我想编写一个正则表达式来帮助我找到任何重复的单个数字。 Like 1 不重复,但 2 提到了两次,3 是 3 次。

x='1234328732'#a string of digits

re.search(r'(\d+).*\1', x).group(1) 

这是我的想法,但这只是给了我模式的回归。上面没有返回任何内容,因为没有重复模式。但是如果

x='1231231234' 

它将返回 123 但重复模式不是我想要的。我想要重复的数字。所以对于第一个 x 它应该给出 2, 3 对于第二个 x,它应该给出 1、2、3

这主要是为了学习 RE 的想法 谢谢

【问题讨论】:

    标签: python regex repeat digit


    【解决方案1】:

    可能是这样的,使用Counter():

    >>> import re
    >>> from collections import Counter
    
    >>> x='1234328732'
    >>> c=Counter(re.findall(r'\d',x))
    >>> [x for x in c if c[x]>1]
    ['3', '2']
    
    
    >>> x='1231231234' 
    >>> c=Counter(re.findall(r'\d',x))
    >>> [x for x in c if c[x]>1]
    ['1', '3', '2']
    

    【讨论】:

    • 你可以完全摆脱正则表达式:Counter(x).
    • 是的,但是 OP 想要使用正则表达式。
    • @Blender 是的,我可以,但是如果字符串也有其他字符怎么办。
    • 这确实可以完成工作,但您能解释一下它实际上在做什么吗?
    • @StudentOfScience Counter 返回一个字典,其中键是传递给它的序列的唯一元素,值是该序列中该键的计数。所以对于第二个x,Counter 类似于Counter({'1': 3, '3': 3, '2': 3, '4': 1}),您可以遍历此字典以查找值 >1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多