【问题标题】:How to allow spaces in the beginning of each row using regex?如何使用正则表达式在每行的开头允许空格?
【发布时间】:2017-08-10 02:12:08
【问题描述】:

我目前有一个验证表达式几乎可以按照我想要的方式工作,只是我在某些行的开头允许空格时遇到了问题。我想在行的开头支持无限的空格。

这是一个示例和我遇到问题的表达式: ^(?=.?[ \t]([., \t]))(?:[1-9][0-9](?:[ \t]\1[ \t][1-9][0-9])+[ \t]*\r?\n?)+$

这是我要匹配的示例字符串:

10 11 12 13 14 30
 9 41 42 44 46 48
10 11 12 13 14 30

找到了我第一个解释我想要做什么的问题:here

【问题讨论】:

  • 您能否在您的问题中添加一个您想要匹配的示例字符串?
  • 您的输入是否只能是带有数字和空格的字符串?你的正则表达式似乎太复杂了。
  • 不,我将接受多种分隔符类型:逗号、空格、制表符。
  • 所以我认为您正在尝试使用单个分隔符一次验证整个字符串?使用前瞻查找分隔符将始终返回相同的结果,因为它是原子的并且不会回溯。
  • 我知道问题出在哪里。解决方案取决于每行有 1 个以上的项目。会是这样吗?

标签: regex validation expression


【解决方案1】:

作为一个高级主题,这将有点难以理解,但在这里。

^\s*[1-9][0-9]*\s*(?=([., \t]))(?:\s*(?:\1|\r?\n)\s*[1-9][0-9]*)+\s*$

您遇到了一个独特的问题,因为您正在尝试验证所有行
作为单个字符串。
当分隔符 not 在
的末尾可用时,问题就出现了 一排。

要解决此问题,请使用带有反向引用(分隔符)的替换
或换行符。

至于字符串开头的空格,只需穿插\s即可。

看这里https://regex101.com/r/nir0uI/1和这里https://regex101.com/r/nir0uI/2

格式化

 ^ 
 \s* 
 [1-9] [0-9]* 
 \s* 
 (?=                                # Lookahead for delimiter.
      ( [., \t] )                   # (1)
 )
 (?:
      \s* 
      (?: \1 | \r? \n )
      \s*       
      [1-9] [0-9]* 
 )+
 \s*  
 $ 

【讨论】:

  • 哇,真是个天才,非常感谢!!!在此解决方案中使用制表符作为分隔符会遇到任何问题吗?
  • 另外,每行末尾的分隔符很难接受吗?我看到可以在每行的末尾添加空格,所以我强调制表符也可以工作。但是在每行的末尾有一个逗号(或空格逗号)和点(或空格点)怎么样?取决于使用的分隔符。我知道这可能会使事情变得更加复杂。告诉我是不是太多了。
  • @justinpees - regex101 链接以绿色突出显示分隔符(第 1 组)。现在的方式是,换行符周围有 3 个条件 (\r?\n)。 No delimiter 或 Delimiter-line break 或 Line break-delimiter。见regex101.com/r/Vll1fT/1。如果您想更改其中一个条件,请告诉我。
  • 再次感谢,我想我还有一个问题。当我记得它是什么时,我会尽快发送评论。
  • 当我要求用户上传 .txt 文件时,您知道是否可以制作这样的 ValidationExpression?我想验证上传的 .txt 文件中的内容。我会为此提出一个新问题。我想先知道是否可以。
【解决方案2】:
\s

在你的表达开头可能会有所帮助。

【讨论】:

  • 我试过了,好像不行。你可以自己测试一下。是因为我将空格设置为分隔符吗?
  • 您到底想验证什么?
【解决方案3】:

在正则表达式的前面添加 零个或多个空格:

^\s*<your regex here>

【讨论】:

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