我正在尝试找到与正确的空格数匹配的正确正则表达式。输入文本可以包含任何其他文字。
如果我想要2个空格,例如模式应匹配:
$destroy
以及具有两个空格的任何其他组合。我目前的正则表达式是:
" AX "
" AX"
"AX BX CX"
然而,正则表达式总是找到两种模式。如果是“AX BX CX”输入,它将找到“AX BX CX”和“CX”。
出于测试目的,我使用简单的perl脚本:
"^(([^[:space:]]*\\s[^[:space:]]*){2})$"
答案 0 :(得分:1)
使用匹配样式的正则表达式执行此操作非常棘手。我可能会根据以下代码推荐更多内容:
my (@fields) = split( /\s/, $input );
if( scalar( @fields ) < 3 ) {
warn "'$input' didn't have enough spaces!";
elsif( scalar( @fields ) > 3 ) {
warn "'$input' had too many spaces!";
}
split
,如果以这种方式使用,则会使用' C'
之类的字符串并将其划分为( '', '', 'C' )
。
答案 1 :(得分:0)
您正在寻找的正则表达式是[^ ]* [^ ]\+ [^ ]*
。只有当您在寻找更多而不是两个空格时,才应使用{}
。例如,将匹配三个空格:[^ ]*\( [^ ]\+\)\{2\} [^ ]*
。
使用以下方式测试:
grep '[^ ]*\( [^ ]\+\)\{2\} [^ ]*'
或
grep '[^ ]* [^ ]\+ [^ ]*'
如果允许两个连续的空格,您可以使用:
grep '\([^ ]* \)\{2\}'
增加2
以获得更多空格。
在你的情况下,我试试:
([^[:space:]]*[:space:]){2}
匹配两个空格,如果你想要两行空格。
^([^[:space:]]*[:space:]){2}[^[:space:]]*$
我们用可能的非空格字符填充双空格。
现在要抓住整行,将其放在一个组中:
(^([^[:space:]]*[:space:]){2}[^[:space:]]*$)
剩下的就是忽略中间组,我们通过在组的开头添加?:
来实现。 最终正则表达式:
(^(?:[^[:space:]]*[:space:]){2}[^[:space:]]*$)
答案 2 :(得分:0)
这很有效。字符串中只有两个空格。
它使用臭名昭着的非滚动循环方法。
GetProcAddress