【问题标题】:Regular expression - dont match consecutive chars - C#正则表达式 - 不匹配连续字符 - C#
【发布时间】:2016-09-19 04:30:06
【问题描述】:

我已经浪费了足够的时间来构造一个匹配的正则表达式。

  1. 以 [a-z]+ 开头
  2. 以 [a-z]+ 结尾
  3. 在两者之间可以有 ' 或 - 或两者,只要用户喜欢 ['-]*
  4. ' 不应该是连续的,同样 - 不应该是连续的。

提前感谢您的帮助。

【问题讨论】:

  • 这可能更容易用普通的字符串函数或单独的正则表达式来做......你可能可以构建一个表达式来做你想做的事,但单独的语句会更具可读性和可维护性,并且在大多数用例中不会表现得更差。
  • @4castle 这不行。
  • 我刚刚在 Regex101 中尝试过。它没有用。
  • @4castle 此输入失败abc'-'-'abc ... OP 没有说明撇号和连字符是否平衡。
  • @TimBiegeleisen 我明白了。固定:^[a-z]+(?:(?:'-)*'?|(?:-')*-?)[a-z]+$

标签: c# regex negative-lookahead


【解决方案1】:
^(?!.*(?:''|--))[a-z][a-z'-]*[a-z]$

您可以添加lookahead 相同的。查看演示。

https://regex101.com/r/wV5bD0/2

如果长度可以是12 你使用

^(?!.*(?:''|--))(?=[a-z])[a-z'-]+(?<=[a-z])$

【讨论】:

  • 感谢 vks,这对我有用。你能把它分解一下,这样我就可以理解它是如何工作的。还是谢谢
  • @ahsant 我唯一添加的是lookahead,它指出如果找到连续的''--,它不应该匹配
  • 如果最小长度可以小于 3(vks 正则表达式至少需要 3),您可以使用 ^(?!.*(?:''|--))\b[a-z'-]+\b$ 模式来允许 1 或更多。
  • @WiktorStribiżew 啊错过了......已经离开正则表达式太久了!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2017-10-26
相关资源
最近更新 更多