regex 如何查找$number之后、下划线或行尾之前的单词?

ncecgwcz  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(127)

如何在以下行中找到foobar

something_something_$20_foobar
something_something_$20_foobar_something
something_something_something_$20_foobar_something
something_something_$1.5_foobar
something_something_$1.5_foobar_something

您只知道foobar将出现在一个下划线后面,后面是一个带美元符号(整数或浮点数)的数字,之后是另一个下划线或行尾。
我尝试了\$.+_(.+)$(在第1行和第4行查找foobar)和\$.+_(.+)_(在第2行、第3行和第5行查找foobar)。
所以你会认为\$.+_(.+)[$_]\$.+_(.+)($|_)会在所有行中找到它,但它们都只在某些行中找到它,并在其他行中找到错误的单词。

t1rydlwq

t1rydlwq1#

您可以使用此正则表达式:

\$\d+(?:\.\d+)?_([^_\n]+)

RegEx Demo

RegEx详细信息:

  • \$:匹配$
  • \d+:匹配1+位
  • (?:\.\d+)?:匹配小数点后可选部分
  • _:匹配_
  • ([^_\n]+):捕获组#1以匹配任何非_且非换行符的字符的1+
lo8azlld

lo8azlld2#

在工作表中,要在整个范围内应用正则表达式作为arrayformula样式,请使用:

=map(A:A,lambda(z,regexextract(z,if(z="",,"\$\d*\.?\d*?_(.*?)(?:_|$)"))))

或者对于独立单元格,您可以直接使用:

=regexextract(A1,"\$\d*\.?\d*?_(.*?)(?:_|$)")

yzckvree

yzckvree3#

使用GNU grep

$ grep -oP '(?<=\d_)[a-z]+' file
foobar
foobar
foobar
foobar
foobar
正则表达式匹配如下:
Regex描述
(?<=\d_)PositiveLookBehind:匹配正则表达式只有当它前面是一个数字,后面是_
[a-z]+匹配一个或多个小写字母
online demo

相关问题