【问题标题】:What is this regular expression's name?这个正则表达式的名称是什么?
【发布时间】:2012-04-23 17:45:00
【问题描述】:

我正在将 this regular expression C# 字符串重构为一个常量,但我不确定如何最好地命名它(我的正则表达式 fu 很弱)。

@"^(?!\s\s)"

问号不是表示可选的东西吗?什么问题说是可选的?

我发现,作为一个开发者,你必须清楚地理解一些东西才能正确地命名它(也:Naming is Hard),所以我想清楚地理解这一点,然后给它一个正确的名称。

这个正则表达式的名称是什么?

我正在考虑LinesThatDoNotStartWithTwoSpacesDoesNotStartWithTwoSpaces

【问题讨论】:

  • 我一直遵循这条规则:不懂的东西不要重构。
  • +1 对变量名给予了如此多的关注......很多爱人..很多爱!
  • 我不确定正则表达式应该做什么,但 '\s' 指的是空白字符而不是空格。正如您也发现的那样,也不清楚问号在做什么。上面上下文中的“^”字符表示“在开头”而不是“NOT”。
  • 是的,其中包括换行符、回车符和其他“垂直”空白字符,这肯定不是您想要的。要尽可能清楚地指定(对人类读者以及正则表达式编译器)您的意思只是空格字符,您可以使用^(?!\x20\x20) 之类的东西。

标签: c# regex naming-conventions constants


【解决方案1】:

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
  • @Crippledsmurf:如果问题是如何编写否定前瞻,我会包含代码,但问题已经包含否定前瞻。问题是构造被称为。我已经包含的名称“Negative lookahead”,答案的重要部分。该链接只是获取索赔,如果没有链接,我本可以写出完全相同的答案。如果链接页面发生变化,此答案不会失效。
【解决方案2】:

构造本身是一个负前瞻。它指定了一个在您的主表达式之后无法匹配的组。

在这种情况下,是的,当匹配的行不以两个空格(空格)开头时匹配。

我将正则表达式命名为NotMatchLineStartingWithTwoWhiteSpaces

【讨论】:

    【解决方案3】:

    我总是尝试在变量名中使用Not。例如NotHuman,它的含义会随着Human的定义而改变。 另外,变量名应该说明这是什么,而不是这个能做什么,所以我认为在变量名中使用动词不是一个好主意,例如SearchMatch

    对于你的情况,LineWithoutIndentation 怎么样,类似于CSS3 中的属性text-indent

    【讨论】:

      猜你喜欢
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2014-07-13
      • 2011-10-31
      • 1970-01-01
      • 2012-03-05
      相关资源
      最近更新 更多