regualr 表达式与整个字符串不匹配的 grep

Grep with regualr expression not matching the whole string

提问人:jeffma 提问时间:9/23/2023 最后编辑:InSyncjeffma 更新时间:9/23/2023 访问量:43

问:

这可能是一个愚蠢的问题,但 ChatGPT 并不能胜任这项工作。

在我的理解中,应该贪婪地将字符串与字母或空格匹配,就像我用 https://regexr.com/ 和 Python 测试的那样。[a-zA-Z\s]+

import re
input_string = "abcd efgh--hello world adf sd"
pattern = r"[a-zA-Z\s]+"
match = re.search(pattern, input_string)
print(match.group())
print('---')
matches = re.findall(pattern, input_string)
for match in matches:
    print(match)
> 
abcd efgh
---
abcd efgh
hello world adf sd

但是,我不知道为什么没有给出相同的结果。grep -Eo

▶ echo ""abcd efgh--hello world adf sd"" | grep -Eo "[a-zA-Z\s]+"
abcd
efgh
hello
world
adf
sd

我的目标是使用 .我的猜测是 with 没有进行贪婪的搜索,但我不确定这一点,我不知道解决它的解决方案。grepgrep-o

正则表达式 grep

评论

3赞 jhnc 9/23/2023
-E选择 POSIX ERE 样式的正则表达式。 里面没有特别的意义......只是在它外面的意思是“s”。如果您的 grep 具有该选项,请选择 PCRE 样式的正则表达式。\s[]-P
0赞 jhnc 9/23/2023
但即使这样,在某些情况下也会有不同的行为。参见 stackoverflow.com/q/33907156/10971581
0赞 jeffma 9/23/2023
@jhnc 非常感谢!我的 grep 没有 ,但用文字空格替换就可以了。-P\s
0赞 Ed Morton 9/23/2023
开始使用 POSIX 字符类而不是硬编码字符,以避免被语言环境更改、缺少字符、不可移植结构等所影响,例如 .[[:alpha:][:blank:]]+

答: 暂无答案