在 awk/gawk 中匹配正则表达式
matching regex in awk/gawk
有人可以让下面的 awk
行在 awk 中工作吗?语法使用标准的 PCRE 正则表达式标准(我需要期望一些非数字字符位于第一个数字之前,即字符串可以看起来像 "++3.59 ± 0.04* "
)。 (请注意,我尝试了 [0-9]
和 [:digit:]
而不是 \d
)还请注意,我确实阅读了 https://www.gnu.org/software/gawk/manual/gawk.html#Regexp
gawk 'BEGIN{test="3.59 ± 0.04";match(test, /^.*?(\d+?\.\d+?)\s*?±\s*?(\d+?\.\d+?)$/, arr);print arr[1];}'
你添加了很多 ?
,我认为你需要使用 [0-9]
此外,当您以 ^[^0-9]
开头时,只有非数字字符是 "eaten away"。
所以总而言之,我认为你想要:
gawk 'BEGIN{test="3.59 ± 0.04";match(test, /^[^0-9.]*([0-9]+\.[0-9]+)\s*±\s*([0-9]+\.[0-9]+)$/, arr);print arr[1];}
匹配第一个数字字符之前的任何非数字字符,然后捕获第一个数字作为第 1 组。
感谢@Ed Morton 的更正。我确实错过了原始正则表达式中第一个数字后的 +
。
有人可以让下面的 awk
行在 awk 中工作吗?语法使用标准的 PCRE 正则表达式标准(我需要期望一些非数字字符位于第一个数字之前,即字符串可以看起来像 "++3.59 ± 0.04* "
)。 (请注意,我尝试了 [0-9]
和 [:digit:]
而不是 \d
)还请注意,我确实阅读了 https://www.gnu.org/software/gawk/manual/gawk.html#Regexp
gawk 'BEGIN{test="3.59 ± 0.04";match(test, /^.*?(\d+?\.\d+?)\s*?±\s*?(\d+?\.\d+?)$/, arr);print arr[1];}'
你添加了很多 ?
,我认为你需要使用 [0-9]
此外,当您以 ^[^0-9]
开头时,只有非数字字符是 "eaten away"。
所以总而言之,我认为你想要:
gawk 'BEGIN{test="3.59 ± 0.04";match(test, /^[^0-9.]*([0-9]+\.[0-9]+)\s*±\s*([0-9]+\.[0-9]+)$/, arr);print arr[1];}
匹配第一个数字字符之前的任何非数字字符,然后捕获第一个数字作为第 1 组。
感谢@Ed Morton 的更正。我确实错过了原始正则表达式中第一个数字后的 +
。