【问题标题】:Python Regex find standalone casePython Regex 查找独立案例
【发布时间】:2017-08-05 02:40:48
【问题描述】:

我有一串时间例如:

text = '2010; 04/20/2010; 04/2009'

我只想找到第一个独立的“2010”,但应用以下代码:

re.findall(r'\d{4}', text)

还将找到嵌入 mm/dd/yyyy 格式的第二个“2010”。

有没有办法实现这一点(不使用';'符号)?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    您可以使用re.search 仅查找第一个匹配项:

    >>> import re
    >>> text = '2010; 04/20/2010; 04/2009'
    >>> re.search('\d{4}', text)
    <_sre.SRE_Match object; span=(0, 4), match='2010'>
    >>> re.search('\d{4}', text).group()
    '2010'
    >>>
    

    来自文档:

    re.search(pattern, string, flags=0)

    扫一扫string寻找 第一个位置,正则表达式 pattern 生成 匹配,并返回对应的match object。如果没有返回None 字符串中的位置与模式匹配;请注意,这是 不同于在某个点找到零长度匹配 字符串。

    强调我的。

    【讨论】:

    • 您好,感谢您的帮助。实际上,独立的 2010 是随机分布在一个长字符串中的,我需要找到它们并替换为 2010 年 1 月 31 日。我打算使用 (?
    【解决方案2】:

    我不知道您是否必须使用正则表达式,但 Python3 中的 .find() 将返回您要查找的字符串开头的最低索引。从那里如果你知道我假设你知道的字符串的长度,你可以用另一行代码用字符串的一部分来推断它。不确定它是否比正则表达式更好或更差,但似乎不太复杂的版本对这种情况做同样的事情。 Here 是关于它的堆栈溢出,here 是上面的 python 文档

    【讨论】:

    • 您好,感谢您的帮助。但真正的文本是这种独立的案例是随机分布的,所以它并不总是第一个案例。我正在考虑将字符串转换为 Pandas 系列并逐行工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2012-12-10
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多