提取两个表达式之间的单词

时间:2014-08-18 20:00:53

标签: regex

我想在解析事务流时提取帐号和金额之间的名称 这是一个示例交易:

18-05 12.34.56.789 MAHMOUUD ADAM 100,00 123 18-05-2014
(18-05) Alexandria

我尝试了以下操作,但它返回null

(?<=\d{2}\.\d{2}\.\d{2}\.\d{3})(\w)+(?=\d+,\d+)

即。查看帐号后面的问题|| {一个或多个单词} ||预见金额

任何想法?

3 个答案:

答案 0 :(得分:1)

\w等于[a-zA-Z0-9_] - 它与空格不匹配。但它匹配数字,所以如果你只是使用

(?<=\d{2}\.\d{2}\.\d{2}\.\d{3})([\w ]+)(?=\d+,\d+)

它将匹配MAHMOUUD ADAM 10。 (前瞻只有一个0)。

试试这个:

(?<=\d{2}\.\d{2}\.\d{2}\.\d{3} )([a-zA-Z ]+)(?= \d+,\d+)

(我还添加了将名称前后的空格与周围环境匹配,以便它们不包括在匹配中)。

答案 1 :(得分:1)

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

\b([A-Z]+(?:\s[A-Z]+)*)\b

<强> Working demo

enter image description here

我已更新答案以支持三个名称 Bohemian 建议

答案 2 :(得分:0)

使用锚点,字符类和m标志:

/^(?:[\s\d\-.]+)([a-zA-Z\s]+)\s/m

Demo

或者,如果你想更具体:

/^(?:\d{2}-\d{2})\s(?:\d{2}\.\d{2}\.\d{2}\.\d{3})\s([a-zA-Z\s]+)\s/m

Demo 2