【问题标题】:Python Regex to detect underscore between lettersPython Regex 检测字母之间的下划线
【发布时间】:2021-01-14 16:01:33
【问题描述】:

如何在 python 中创建一个正则表达式,它返回一个所有下划线都在小写字母之间的字符串? 例如,它应该检测并返回:'aa_bb_cc' , 'swd_qq' , 'hello_there_friend'

但它不应该返回这些:'aA_bb' , 'aa_' , '_ddQ' , 'aa_baa_2cs'

我的代码是 ([a-z]+_[a-z]+)+ ,但它只返回一个下划线。它应该返回由小写字母分隔的所有下划线。

例如,当我传递字符串"aab_cbbbc_vv" 时,它只返回'aab_cbbbc' 而不是'aab_cbbbc_vv'

谢谢

【问题讨论】:

  • 问题是因为您还“要求”大写字母。将[a-zA-Z] 切换为[a-z]
  • 我更改了代码,但仍然只返回一个下划线
  • @cxs101 可能是[a-z_]+
  • 你能写出整个代码吗,因为我不确定你的意思
  • @cxs101:您能否考虑接受其中一个答案(答案旁边的灰色勾号)?

标签: python regex


【解决方案1】:

您的正则表达式几乎是正确的。如果您将其更改为:

^([a-z]+)(_[a-z]+)+$

您可以查看here

^ - 匹配字符串的开头

$ - 字符串的结尾

您需要这些,以便在匹配您不想匹配的字符串时不会得到部分匹配。

【讨论】:

    【解决方案2】:

    试试这个代码来获取它

    import re
    s = "aa_bb_cc swd_qq hello_there_friend aA_bb aa_ _ddQ aa_baa_2cs"
    print(re.findall(r"[a-z][a-z_]+\_[a-z]+",s))
    

    输出应该是

    ['aa_bb_cc', 'swd_qq', 'hello_there_friend', 'aa_baa']
    

    【讨论】:

      【解决方案3】:

      您的示例数据只得到带有 1 个下划线的结果的原因是 ([a-z]+_[a-z]+)+ 重复匹配 [a-z]+,然后是下划线,然后是 [a-z]+

      例如,这将匹配 a_ba_bc_d,但仅部分匹配 a_b_c,因为每次迭代的每个 _ 之前必须至少存在一个字符 a-z。

      您可以将模式更新为:

      \b[a-z]+(?:_[a-z]+)+\b
      

      说明

      • \b一个字边界
      • [a-z]+ 匹配 1+ 个字符 a-z
      • (?:_[a-z]+)+ 重复 1+ 次匹配 _ 和 1+ 字符 a-z
      • \b一个字边界

      regex demo

      【讨论】:

        猜你喜欢
        • 2016-02-09
        • 1970-01-01
        • 2014-01-01
        • 2019-10-01
        • 2016-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多