【问题标题】:Grouped Regex to match a line that *sometimes* starts with spaces?分组正则表达式以匹配*有时*以空格开头的行?
【发布时间】:2011-01-20 15:21:20
【问题描述】:

RegEx 风格:wxRegEx.

我正在尝试创建一个与有时以空格开头的字符串匹配的“分组”正则表达式。当它不以空格开头时,它以目标组开头(以下示例中的第二个括号表达式)。它是由一些可预测的标记和任意文本的一部分组成的相对简单的行,例如

"good: Sed ut perspiciatis unde omnis iste natus error "
"better: Sit voluptatem accusantium doloremque laudantium "
"best: Nemo enim ipsam voluptatem quia voluptas "
" ok: Sit voluptatem accusantium doloremque laudantium "

注意:引用的字符不是我输入的一部分。通过在我的帖子中引入引号,我试图使每行/字符串的边界更清晰。

我想出的以“分组”方式匹配上述内容的正则表达式(即我可以分别处理每个组以进行进一步处理)是:

(^\s*)(good|better|best|ok)(: )(.*)( $)

注意:\s 是 wxRegEx 的 [[:space:]] 的类简写转义。

问题是这个正则表达式只在行实际上以空格开头时才有效。为什么? '\s' 后面的 '*' 不是表示“0 次或多次出现 \s”吗?

我知道我在这里遗漏了一些基本的东西,但它是什么?

【问题讨论】:

  • 引号字符是您输入的一部分吗?
  • 只是一个想法:如何将字符串开头的字符移出组,并使用问号使组可选? ^( \s*)?(good|better|be ...
  • @Bazzz 我刚刚尝试了您的建议。相同的(错误)行为。
  • @slartidan 不,引用的字符不是我输入的一部分。通过在我的帖子中引入引号,我试图使每行/字符串的边界清晰。

标签: regex wxwidgets pattern-matching


【解决方案1】:

您是否尝试过使用(^ *) 而不是(^\s*)?您是否可能对 \s 语法有误?我自己也不知道 wxRegEx。

【讨论】:

  • 你成功了。使用 (^ *) 它可以工作。但为什么?我知道 \s 只是 ARE 的一部分,但我确保正则表达式是使用启用 ARE 的 wxRE_ADVANCED 编译的。请参阅此处的文档:biolpc22.york.ac.uk/wx/docs/html/wx/… 我有可能使用 两个 反斜杠吗?
  • 回答自己:是的!我应该使用 两个 反斜杠,因为实际的正则表达式是 C++ 源代码中的字符串。
  • @Regex Rookie:亲爱的,很高兴我能帮上忙。
【解决方案2】:

我不熟悉wxRegEx,但是如果是PCRE,我想你可能想要(^\s*)?(good|...

“?”修改整个零或多个捕获以使其为零或一。

【讨论】:

  • 这将使^ 成为可选的。
【解决方案3】:

这很奇怪.. * 应该匹配 0 次或更多次是对的...将插入符号 (^) 移到组外有什么不同吗?

【讨论】:

  • 我尝试将插入符号移出组,但没有任何区别。
【解决方案4】:

我在您的正则表达式中没有发现明显的错误。当然,您对* 的解释也是正确的。你的表达中可能有一些实际的空格吗?空格(like -> (^ \s*) 这将具有您描述的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多