正则表达式匹配,当目标字符串中有一个向后移动的模式时?

时间:2015-10-29 05:49:20

标签: java regex string

我有一个文件,每行都有以下模式:

A<space>B<space>C

其中:

  • A,B,C是三个可变长度字符串的块,例如&#34; Hi I&#39; m块A I&#39; mB I&#39; mC&#34;
  • B和C都是一个单词,C以行终止结束,并且有#34;空格&#34;在B周围。
  • A几乎可以是任何东西(也可以有任何可变数量的空格)

我可以使用什么正则表达式来分割3行?!

我目前使用类似:substring(*line*.lastIndexOf(" "))来获取C,更改以保持A B并重复获取B,然后剩下的是A.

但有没有办法用Regex做到这一点?!一般来说,当知道模式在字符串中向后移动时,如何使用正则表达式?!

2 个答案:

答案 0 :(得分:4)

这个正则表达式会这样做:

^(.+?) (\S+) (\S+)$

Here's a demo。在您的示例中,它捕获了三个组:

Hi I'm block A
I'mB
I'mC

说明:

  • ^字符串的开头
  • (.+?)捕捉任何角色,但是&#34;非贪婪的&#34; (尽快停止)
  • 空格
  • (\S+)捕获任何非空白字符组
  • 空格
  • 再次
  • (\S+),捕获任何一组非空白字符
  • $行尾

答案 1 :(得分:2)

只需在firstsecond space from last上进行拆分。

string.split("\\s+(?=\\S+\\s+\\S+$)|\\s+(?=\\S+$)");

DEMO