【问题标题】:Repeat Regular Expression重复正则表达式
【发布时间】:2014-04-15 12:15:33
【问题描述】:

我需要一个正则表达式来检查字符串中的每个 - 前后是否都有一个字母。

到目前为止我得到了这个:

(([-])?[a-zA-Z ]+[a-zA-Z]+[-]+[a-zA-Z]+[a-zA-Z ]+$|[a-zA-Z ]+$)|([a-zA-Z ])

适用于这些示例:

  • 测试人员
  • tester_test
  • Tester_test

不适用于以下示例:

  • Tester_test tester_test
  • 测试 st_te_st_te_st

【问题讨论】:

  • regex 对于相对简单的匹配来说看起来太复杂了。考虑简化它。
  • 请您详细说明您要匹配的内容?
  • “不起作用”是什么意思?它是如何失败的?你想做什么?
  • 我希望它适用于所有示例。
  • 字符串中的每个-前后都需要有一个字母。

标签: asp.net regex


【解决方案1】:

要确保每个下划线都被一个字母包围,您可以使用

(?<=[a-zA-Z])_(?=[a-zA-Z])

Debuggex Demo

此演示适用于您的所有输入。

这使用positive lookbehind ((?&lt;=...)) 和lookahead ((?=...))。


请考虑将Stack Overflow Regular Expressions FAQ 加入书签以供将来参考。有一个关于可能感兴趣的环视的部分,以及底部的在线测试人员列表。

【讨论】:

  • 是什么意思?
  • @Xatenev:更新了我的答案。它们是我提到的前瞻和后防。
  • 未捕获的语法错误:无效的正则表达式
  • 从结构上讲,这是我一段时间以来见过的与正则表达式相关的最佳答案之一!遗憾的是 debuggex 只支持 javascript、python 和 perl。 ASP.NET 语法可能会有所不同,并且前瞻功能甚至可能不存在 - 我不知道。 @eXo 提到的常见问题解答真的很有帮助,去看看吧。
  • 它适用于我的 regexhero,它是 .NET 正则表达式的在线测试器:regexhero.net/tester/?id=35632c5b-ccbd-430b-a8e5-97f833b1b08f。 @eXo:您是要给我们更多信息以便我们更好地帮助您,还是只是向我们抛出错误消息?
【解决方案2】:

这个正则表达式似乎适用于您的所有示例,以及许多其他示例。 检查以下是否定的:

^(.*(([^a-zA-Z]-)|(-[^a-zA-Z])).*)$

在这里查看这个正则表达式,有很多例子:

http://www.rubular.com/r/o2OZYJheIt

【讨论】:

  • 我认为要求是字母需要在下划线/破折号的两边。意思是a-a 可以,a--aa-$- 不行。
  • 我不认为提问者使用了 ruby​​。
  • @SebastianH 正则表达式可能与他的非常相似。正则表达式不会改变太多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2016-06-13
相关资源
最近更新 更多