【问题标题】:Regex Detect Double Space正则表达式检测双空格
【发布时间】:2017-12-21 22:44:29
【问题描述】:

我正在尝试获取一个正则表达式来检测字符串中是否存在双空格。但如果它确实检测到一个双空格,它将返回为假。所以基本上字符串中的任何其他内容都是有效的,除了并排的两个空格。在下面的示例中,下划线 (_) 是空格。

'Hello_World' ==> 有效

'Hello__World' ==> 无效

'Hello___World' ==> 无效

'1_2_3_4_5' ===> 有效

'1_2_3__4_5' ==> 无效

这是我当前的正则表达式

/^([^/s/s]*)$/

【问题讨论】:

  • 你的正则表达式在哪里?
  • 欢迎来到 Stack Overflow。这不是一个代码/SQL/正则表达式编写服务,您可以在其中发布您的要求和选择的语言列表,并且代码猴子会为您生成代码。我们非常乐意提供帮助,但我们希望您首先努力自己解决问题。完成后,您可以解释您遇到的问题,包括您工作的相关部分,并提出具体问题,我们会尽力提供帮助。祝你好运。
  • 抱歉,/^([^/s/s]*)$/ 不是有效的正则表达式。至少它是相当没有意义的,它匹配包含除/s 之外的0+ 个字符的字符串。你用这种模式是什么意思?
  • @Wiktor Stribiżew 我试图检测字符串中是否存在两个并排的相同字符。我知道/^([^a]*)$/ 会检测是否存在字母“a”,但我想检测字符串中是否存在两个空格。
  • 然后使用if (!/\s{2}/.test(s)) { /*CORRECT*/ }。或者类似if (s.Contains(" ")) { /*bad*/ }(包含两个空格)

标签: regex double spaces


【解决方案1】:

不要专注于 2 个空格 不是,而是对它 使用负面的看法:

^(?!.*  ).+

或者如果第一个和最后一个必须是非空格(未说明):

^\S((?!.*  ).*\S)?$

这也允许恰好 1 个非空格作为整个输入。


使这项工作发挥作用的主要因素是这个表达式^(?!.* ),它否定前瞻(?!.* ) 锚定^的输入开始。它断言,在不消耗输入的情况下,当前点后面的文本确实匹配给定的表达式,在这种情况下".* "(为清楚起见添加了引号),即“任何两个空格” .换句话说,“这里之后的任何时候都不会出现两个空格”。

第二个选项可以写成^\S(?!.* ).*\S$ - 与第一个相同,但在任一端都有\S,但这将需要在每一端都有不同个字符,因为\S会消耗输入,所以它不会匹配单个字母,例如"X"。我将除第一个可选之外的所有字符都设置为允许单个字符通过(根据您的要求),同时保留两个空格。

【讨论】:

  • 它们似乎都工作得很好。它是如何工作的?您能否分解正则表达式并解释这些部分。
  • 谢谢!这正是我所追求的。
  • @Peter - 这是我使用的几个网络应用工具,它们应该有助于可视化和理解正则表达式模式的确切作用,并有助于尝试寻找其他模式:regex101.comdebuggex.com跨度>
【解决方案2】:

你可以使用类似的东西

^(\S\s{0,1})*\S$

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多