构建正则表达式时遇到问题。这是文本的示例:
text 123 12345 abc 12 def 67 i 89 o 0 t 2
这些数字有时用空格填充到最大长度(3)。 e.g:
我的正则表达集就在这一刻:
\b([\d](\s*)){1,3}\b
此正则表达式的结果如下:(.
=空白以获得更好的可见性)
123.
12....
67.
89.
0....
2
但我需要这个:(。=空白以获得更好的可见性)
123
12.
67.
89.
0..
2
如何告诉正则表达式引擎将空白计入{1,3}选项?
答案 0 :(得分:0)
这样做你想要的吗?
\b(\d){1,3}\s*\b
这将在选择后包括空格(如果可用)。
答案 1 :(得分:0)
我想你想要这个
\b(?:\d[\d\s]{0,2})(?!\d)
单词边界最终不起作用,因为如果匹配的结尾是空格,则没有单词边界。因此,我使用否定前瞻(?!\d)
来确保没有数字跟随。
但如果你有一个像这样的字符串“1 23”。它只匹配“2”和“23”,但不匹配第一个“2”之后的空格。
答案 2 :(得分:0)
试试这个:
\b(?:\d[\d\s]{0,2})(?:(?<=\s)|\b)
这也将涵盖text 123 1 23 12345 123abc 12 def 67 i 89 o 0 t 2
之类的字符串,结果为:
123
1.
23.
12.
67.
89.
0..
2
答案 3 :(得分:0)
假设您想在其他地方使用填充数字,请将问题分成两部分; (简单)解析数字,并(简单)格式化数字(包括填充)。
while ( $text =~ /\b(\d{1,3})\b/g ) {
printf( "%-3d\n", $1 );
}
可替换地:
@padded_numbers = map { sprintf( "%-3d", $_ ) } ( $text =~ /\b(\d{1,3})\b/g )