gpt4 book ai didi

正则表达式只匹配数字

转载 作者:行者123 更新时间:2023-12-05 03:15:00 26 4
gpt4 key购买 nike

我无法理解我在 bash shell 中的正则表达式到底在做什么。

我有字符串 abcde 12345 67890testing。我想使用 sed 从这个字符串中提取 12345

但是,在给定的字符串上使用 sed -re 's/([0-9]+).*/\1/' 会得到 abcde 12345 .

或者,使用 sed -re 's/([\d]+).*/\1/' 实际上只会提取 abcd

我假设表达式 [0-9][\d] 只捕获数字是错误的吗?我不知道 abcd 是如何被捕获的,但字符串 67890 不是。另外,我想知道为什么在我的第一个查询中捕获了空间?

此外,sed -re 's/^.*([0-9]+).*/\1/' 给我 0。在这种情况下,我完全不明白正则表达式在做什么。我以为表达式 ^.*[0-9]+ 只会捕获只有数字的字符串的第一个实例?但是,它只匹配最后一个 0。

总而言之,我想了解我在所有这些方面的错误之处。以及如何在不使用正则表达式中的 [\s] 来隔离第一串数字的情况下解决问题。

最佳答案

sed -E 's/([0-9]+).*/\1/g'  <<< "$s" 

上述命令的意思是:找到一个数字序列,然后用数字替换它。所以它匹配 12345 67890testing 并只用 12345 替换它。

最后的字符串将是 abcd 12345

如果你只想得到 12345,你应该使用 grep。

egrep -o '[0-9]+ ' <<< "$s"

或者您可以使用 sed:

sed -E 's/[a-zA-Z ]*([0-9]+).*/\1/g'  <<< "$s"

这将删除数字之前的字母

关于正则表达式只匹配数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com