【问题标题】:RegEx for ignoring parentheses in a stringRegEx 用于忽略字符串中的括号
【发布时间】:2019-04-29 16:37:41
【问题描述】:

这些是这样的字符串:

strs = "Tierd-Branden This is (L.A.) 105  / New (Even L.A.A)"

尝试以下代码后,我没有得到预期的输出。

这是我的代码:

import re, itertools
strs = "Tierd-Branden This is (U.C.) 105  / New (Even L.A.A)"
print re.findall(r"[\w']+[\w\.]", strs)

我希望这样:

['Tierd', 'Branden', 'This', 'is', 'L.A.', '105', 'New', 'Even', 'L.A.A']

但是,我明白了:

['Tierd', 'Branden', 'This', 'is', 'L.', 'A.', '105', 'New', 'Even', 'L.', 'A.']

我的问题是如何将括号的内容与 . 链接为列表元素?

【问题讨论】:

  • 使用r"[\w'.]+"r"\w[\w'.]*"(如果单词 char 必须在前)。见regex demo

标签: python regex regex-lookarounds regex-group regex-greedy


【解决方案1】:

[\w']+[\w\.] 模式匹配一​​个或多个单词或' 字符,然后匹配一个单词或. 字符。因此,它无法匹配包含超过 1 个点的单词块或 ' 字符。

我建议使用

r"\w[\w'.]*"

查看regex demoRegulex graph

详情

  • \w - 一个字字符
  • [\w'.]* - 0 个或多个单词,'. 字符。

【讨论】:

    【解决方案2】:

    This RegEx 可能会返回您想要的输出,您可以简单地在 [] 中列出您想要的所有字符。如果您愿意,您可以使用捕获组,只需使用 $1 调用它。您可以在 [] 中添加您可能希望/拥有的任何其他字符,如果这些字符可能是元字符,您可以使用 \ 进行转义。

    ([A-Za-z0-9\.]+)
    

    您可以删除捕获组,它可能仍然有效:

    [A-Za-z0-9\.]+
    

    【讨论】:

    • 我建议避免使用 标签,而是使用反引号 (`) 以获得更好的可读性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2012-08-12
    • 2019-12-18
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多