在 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 的更正。我确实错过了原始正则表达式中第一个数字后的 +