【问题标题】:Can I add non-capture groups with a list of optional characters?我可以添加带有可选字符列表的非捕获组吗?
【发布时间】:2021-04-11 19:25:24
【问题描述】:

我需要匹配具有a-z、\? 或\* 的字符串,例如:

abcd
abc\?d # mush have a \ in front of a ?
abc\*d
ab\?c\*d

并排除在其他标点符号前没有\的字符串,例如

abc?d
abc*d
ab?c*d

我试过[a-z(?:\\\?)(?:\\\*)]+ (https://regex101.com/r/5yYBDl/1),但它不起作用,因为[] 只支持我猜的字符。

任何帮助将不胜感激。

【问题讨论】:

    标签: python regex re


    【解决方案1】:

    会匹配Unicode 字符吗?根据您的应用程序,它可能支持 Unicode

    ^(?:[a-z]|\u005c[\u003f\u002a])+$
    

    https://www.regular-expressions.info/unicode.html
    来自本网站的 sn-p
    “Perl、PCRE、Boost 和 std::regex 不支持 \uFFFF 语法。它们使用 \x{FFFF} 代替。您可以在大括号之间的十六进制数字中省略前导零。因为 \x 本身不是一个有效的正则表达式标记,\x{1234} 永远不会被混淆为匹配 \x 1234 次。它总是匹配 Unicode 代码点 U+1234。\x{1234}{5678} 将尝试完全匹配代码点 U+1234 5678次"

    【讨论】:

    • \? 不是一个 unicode 字符,它实际上是 \ 和 ?​​span>
    • 试试 [a-z\u005c]+
    • [\u005c]+ 是 \[\u003f]+ 是 ?
    • 对不起,我有点困惑。 \u005c 和 \u003f 仍然是 2 个字符,我如何匹配 \? 而不单独匹配 ??
    • ^(?:[a-z]|\u005c[\u003f\u002a])+$
    【解决方案2】:

    您可以将此正则表达式与交替和锚点一起使用:

    ^(?:[a-z]|\\[*?])+$
    

    Updated RegEx Demo

    正则表达式详细信息:

    • ^:开始
    • (?:[a-z]|\\[*?])+:非捕获组匹配[a-z] 或\? 或\*。匹配 1 个或多个此非捕获组。
    • $:结束

    【讨论】:

      猜你喜欢
      • 2020-04-18
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多