【问题标题】:Regex - only allow a space or nothing after a match正则表达式 - 匹配后只允许空格或没有空格
【发布时间】:2012-04-18 14:42:13
【问题描述】:

您好,我对 Regex 几乎是新手...所以,也许我的问题很简单,但我找不到解决方案!

我正在编写一个正则表达式模式,它查看用户的写作并用另一种颜色绘制所建立的匹配项。 例如,如果用户写这样的东西,我想用另一种颜色绘画:

foo()

问题是我不想画如果用户在那之后写别的东西,我的意思是如果用户只写

"foo()" (or "foo() ")

那没关系,我想画,但如果用户写

"foo()d" 

我不想画那个,因为现在写得很好。

我已经编写了匹配“foo()”的正则表达式模式(或者中间也有一个点,比如“foo.foo()”),但我正面临这个问题。 我需要在我的模式中添加一些东西,只允许一个空格,或者什么都没有(如果用户在“)”之后写了其他东西,我不想匹配它。) 这是我的模式:

[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)

非常感谢!

【问题讨论】:

  • 您的要求并不完全清楚。后面还有人物吗?如果没有,你可以用\s?$结束你的正则表达式。
  • 对,这个不行,因为我想让用户继续写……

标签: c# regex


【解决方案1】:

David Brabant 很接近,但我认为您实际上想尝试以 (?!\S) 结束您的正则表达式 - 这意味着您将匹配任何后面没有非空白字符的内容。如果您只想匹配空格而不是空格,请使用(?![^ ])

【讨论】:

  • 由于您是 Regex 的新手,您可能还不知道 ^ 和 $ 符号。它们是线锚。例如,如果你的正则表达式是 "^foo()[ ]?$" 它只会匹配整行的 "foo()" 和 "foo() "。
【解决方案2】:

使用负面展望:

(\w+)(\.*)(\(\))+(\s)*(?!.)

在上面的正则表达式中对你来说重要的部分是:(\s)*(?!.)

(\s)* : 后跟 0 个或多个空格 (?!.) : 没有其他角色

【讨论】:

  • @gezequiel:见我之前的评论。您需要对此进行一些小调整。
  • 是的...但是如果您在此正则表达式之后开始编写其他内容,它将不起作用。我的意思是,我希望用户可以写出这样的东西:something() 和 somethingElse() 并画出这两个句子
【解决方案3】:
[a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)[ ]?

添加[ ]? 应该可以。 ? 用于10[ ] 将只匹配空格。

另外,[\s]? 适用于所有类型的空白(包括制表符)。

【讨论】:

  • 这行不通,好像下一个字符不是空格,它会匹配空格零次。我认为如果 gezequiel 匹配 \S,即非空白字符,他会失败。
  • 谢谢阿德,应该更彻底地阅读这个问题。
【解决方案4】:

您可以尝试添加:

\s*% ?

\s* : 零个或多个空格

% 表示:字符串结束

【讨论】:

    【解决方案5】:

    根据我的正则表达式测试器,这似乎符合您的要求:

    [a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]?)(?!.)
    

    如果你想允许多个空格,使用这个:

    [a-z]*\.?[a-z]*\(("[^"\r\n]*"|[-]?\b\d+[\.]?\d*\b)?\)([ ]*)(?!.)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多