Regex 匹配百分比

Regex 匹配百分比,regex,Regex,我一直在尝试增强一些代码,以确定字符串是否为有效百分比。 我决定是时候学习正则表达式了。 我一直在使用WebRegexTester构建我的模式 我试着不严格地这样做,这样有效的百分比可以是整数或十进制,正数或负数,包括逗号或不包括逗号,在开头和结尾以及可选负号和所需的百分号周围有任意数量的空格 到目前为止,我有\s*-?\s*\d+(,\d+)*(?:\.\d*)?\s*%\s*,它几乎正确地匹配了我所有的测试用例: 0 0 0 % 0 -

我一直在尝试增强一些代码,以确定字符串是否为有效百分比。 我决定是时候学习正则表达式了。 我一直在使用WebRegexTester构建我的模式

我试着不严格地这样做,这样有效的百分比可以是整数或十进制,正数或负数,包括逗号或不包括逗号,在开头和结尾以及可选负号和所需的百分号周围有任意数量的空格

到目前为止,我有
\s*-?\s*\d+(,\d+)*(?:\.\d*)?\s*%\s*
,它几乎正确地匹配了我所有的测试用例:

0
 0 
  0  
% 0
        -              0                %            
  20948.924780% 
315%
2,456,875 %
2,104.86%
      89fqyf0gp948y1-%ghghpq98fy92,.?><
 , , , ,,,, 0,0,000,00,00,,,0
 , , , ,,,, 0,0,000,00,00,,,0%
000000000,00000000000 %
000000000,00000000000,00000000000 %
000000000,00000000000,00000000000,00000000000.00000000000 %
0
0
0
% 0
-              0                %            
20948.924780% 
315%
2,456,875 %
2,104.86%
89fqyf0gp948y1-%ghghpq98fy92,.?><
, ,,,, 0,0,000,00,00,,,0
, ,,,, 0,0,000,00,00,,,0%
000000000,00000000000 %
000000000,00000000000,00000000000 %
000000000,00000000000,00000000000,00000000000.00000000000 %
这些都不是以任何特定的顺序,一些通过,一些失败,但只有一个是不正确的。在
,,,,,0,0000,00,00,,,,0%
中,最后一个
0%\n
匹配,但整行应该无效。开始和结束指示器似乎没有我假设的效果,因为
$
只匹配最后一个示例,而开头的
^
不匹配寄存器

它可能很小,但作为一个昨天才学会正则表达式的人,它远远超出了我的能力范围

谢谢

开始和结束指示符似乎没有我假设的效果,因为$只匹配最后一个示例,而开头的^不匹配寄存器


这些应该是有效的。但是,它确实取决于正则表达式引擎和选项是否匹配行开始/结束或文件开始/结束。在RegExr上,您必须检查多行选项:-在编程中,使用
m
标志。

可以这样做

编辑:所以在意识到它是一条直线之后,这就是现在的正则表达式

注-
使用多行模式行Bergi。
此外,在这种情况下不能仅使用
\s
wihitespace类。 无论使用什么模式,
\s
都将匹配CRLF(如果可以),这意味着
-
000000000.22
%

将匹配,因为它满足所有条件。
[^\S\r\n]
表示除CRLF字符外的匹配空格。可以用
[^\S\n]
在现实世界中。该测试仪上的初始输入使用了换行符

祝你好运

 #  ^[^\S\r\n]*-?[^\S\r\n]*(?:(?:\.\d+)|(?:\d+(?:,\d+)*(?:\.\d*)?))[^\S\r\n]*%[^\S\r\n]*$

 ^                   # BOL
 [^\S\r\n]* 
 -?                  # optional -
 [^\S\r\n]*              
 (?:                 # group
      (?: \. \d+ )        # .number
   |                      # or
      (?:                 # group
           \d+                 # number 
           (?: , \d+ )*        # optional many ,number
           (?: \. \d* )?       # optional . optional number
      )                   # end group
 )                   # end group
 [^\S\r\n]* 
 %                   # % 
 [^\S\r\n]* 
 $                   # EOL

首先,从技术上讲,任何整数/浮点数都可以是一个百分比。200%仍然是一个有效的百分比。第二,这个示例文本究竟来自什么?似乎是一种极其复杂、模糊不清、不规则的存储百分比的方法。你是想验证字符串中可能有其他内容的百分比吗?@ ReMuS:是的,200%以上的模式是有效的,这不是问题所在。这只是一个实用函数,它以前说过任何包含%的字符串都是有效的。啊,这是有道理的。明白了,你的问题是关于锚的。没有看到。只是一个提示,\s在该测试用例中将跨越多行。可以匹配字符串
“-\n000000000.22\n%\n”