使用正则表达式捕获非连续文本。我该怎么做?

时间:2014-02-20 18:47:27

标签: java regex formal-languages

我想使用正则表达式从字符串中捕获非连续文本,我发现它非常困难。 (无法使其工作)

我有以下内容:

“John KC Mary V oranges。”

KC和V是标签,它们将始终存在于我的字符串中。在这种情况下,我想拍摄“John V oranges”。

所以我想要的是删除KC并翻转直到V(V除外)。

我无法弄清楚如何做到这一点。我在Java代码上这样做,所以我认为我对正则表达式有一些语法限制。

另一个限制是我只需要使用正则表达式。我不能用java替换。

如果你们能给我一些想法,我会真的很好。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式

([a-zA-Z ]+)KC [a-zA-Z]+ (V [a-zA-Z]+)

将返回类似

的数组
Array
(
   [0] => John KC Mary V oranges.
   [1] => John
   [2] =>  V oranges.
)

你可以选择最后2个索引..简单..

答案 1 :(得分:0)

将此正则表达式用于搜索替换:

KC.*?\s(?=V)

这意味着在KC之后接着是V.并考虑在V之前有一个空格。

以上正则表达式是您想要搜索替换的时间。但如果你想使用正则表达式匹配,那么正则表达式将是:

(.*?)\sKC.+(\sV.*)

执行正则表达式匹配后,只需连接返回的匹配的group-1和group-2。