我正在尝试确定正确的 RegEx 语法来执行以下操作。我在一个文件中有一行,我想在第一次出现空白之前匹配每个字符。
所以例如在这一行:
123abc xyz 富吧
我不清楚为什么会这样:
^.*\s
与单词栏中的 b 匹配:
123abc xyz 富
在我看来 \s 是贪婪的,但是我不确定如何使它不贪婪并且只匹配 123abc 我尝试了各种形式的这个正则表达式,试图使它不贪婪^.*\s?
或类似的东西,但是我一直不成功。先感谢您
我正在尝试确定正确的 RegEx 语法来执行以下操作。我在一个文件中有一行,我想在第一次出现空白之前匹配每个字符。
所以例如在这一行:
123abc xyz 富吧
我不清楚为什么会这样:
^.*\s
与单词栏中的 b 匹配:
123abc xyz 富
在我看来 \s 是贪婪的,但是我不确定如何使它不贪婪并且只匹配 123abc 我尝试了各种形式的这个正则表达式,试图使它不贪婪^.*\s?
或类似的东西,但是我一直不成功。先感谢您
那是因为.
可以是任何字符,包括空格。你可以试试
^[^ ]*\s
或者
^\S*\s
反而。
那是贪婪的。但你也可以做出非贪婪的 re:
^.*?\s
你的错误是你放?
错了地方。
例子:
$ echo aaaa bbb cccc dddd > re.txt
$ cat re.txt
aaaa bbb cccc dddd
$ egrep -o '^.*\s' re.txt
aaaa bbb cccc
$ egrep -o '^\S*\s' re.txt
aaaa
$ egrep -o '^[^ ]*\s' re.txt
aaaa
使用 perl 进行非贪婪搜索:
$ perl -ne 'print "$1\n" if /^(.*?)\s/' re.txt
aaaa
使用正则表达式^\S*(?=\s)
这意味着从一开始 ( ) 开始的所有 ( *
) 非空白字符 ( ),但后面必须是空白字符 ( ),但不包括在匹配中 - 正向前瞻\S
^
\s
(?=\s)
如果您还希望包含尾随空格,请使用正则表达式^\S*\s+