正则表达式匹配前匹配3个字符

时间:2011-07-29 04:06:51

标签: regex

我有一个像

这样的行的文件
  

text text text 3424 text text 3423 50 US text 342 text

我想要匹配的是 50 US (是的,美元)并最终提取该数字。 其他所有内容都会在不同的行中发生变化,可能会有更多文字或更少的文字,但在每一行中只有一个“US”锚点可以匹配。

所以我想要的是找到一种方法来匹配 US 并获取前3或4个字符。

有什么想法吗?最好使用sed / awk,但任何解决方案都可以。

4 个答案:

答案 0 :(得分:1)

Perl正则表达式(或任何理解非贪婪.*?表达式的东西)比sed更容易:

perl -pe 's/^.*?(\d+\.?\d*)\s*US.*$/$1/'

这也将处理“11.23”之类的事情。

答案 1 :(得分:0)

\d+ US

这应该有效,因为美国只在字符串中出现一次。

答案 2 :(得分:0)

使用lookarounds

\d+(?= US)

此正则表达式仅捕获数字量。 (?= US)告诉它在“美国”上匹配但不捕获它。

答案 3 :(得分:0)

这是您可以在VBA正则表达式中使用的,它也支持前瞻:

" ((.+)(?= US))"
  • 以空格开头
  • 接下来是捕获组。 (。+)我使用它代替\ d,以便像5,000和11.3这样的东西起作用。事实上,任何东西都有效,所以如果你想要“US”之前的单词/数字,那么这就是写它的方式。
  • 接下来是前瞻。因此,您只需要紧跟“US”的捕获组。如果找到它,它只会返回捕获组,而不是前瞻值。