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

Java 使用正则表达式捕获非连续文本。我怎么做?,java,regex,formal-languages,Java,Regex,Formal Languages,我想使用正则表达式从字符串中捕获非连续文本,我发现这非常困难。(无法使其工作) 我有以下资料: “约翰·KC·玛丽诉橙子案。” KC和V是标记,它们将始终存在于我的字符串中。我想在这个案子中抓住“约翰诉橙子” 所以我想要的是删除KC和所有东西,直到V(除了V) 我不知道该怎么做。我在Java代码上这样做,所以我认为正则表达式有一些语法限制 另一个限制是,我只需要使用正则表达式。我不能用java替换 如果你们能给我一些想法,我真的很抱歉 谢谢。使用此正则表达式进行搜索替换: KC.*?\s(?=V

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

我有以下资料:

“约翰·KC·玛丽诉橙子案。”

KC和V是标记,它们将始终存在于我的字符串中。我想在这个案子中抓住“约翰诉橙子”

所以我想要的是删除KC和所有东西,直到V(除了V)

我不知道该怎么做。我在Java代码上这样做,所以我认为正则表达式有一些语法限制

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

如果你们能给我一些想法,我真的很抱歉


谢谢。

使用此正则表达式进行搜索替换:

KC.*?\s(?=V)
它的意思是KC后面跟V,考虑到V前面有一个空格

上面的正则表达式是您要执行搜索替换的时候。但是,如果您想使用正则表达式匹配,则正则表达式将是:

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

执行正则表达式匹配后,只需对返回匹配的第1组和第2组进行搜索。

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

([a-zA-Z ]+)KC [a-zA-Z]+ (V [a-zA-Z]+)
它将返回一个数组,如

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

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

这将返回我“KC Mary”。如果我能用String.replace,那就太完美了。但是我不能使用字符串。我需要一个regexp,将返回我完全“约翰V橙”。张贴您的代码在您使用regexp。regexp是正确的。我怀疑你用错了,明白了。你不想使用正则表达式替换,而是想将其作为正则表达式匹配。是的,你得到了!这是我的问题。我开始认为没有解决方案。所以不可能在一个匹配中得到它,对吗?好吧,不可能在一个匹配中得到输入的非连续部分。您必须使用组和/或替换来实现您想要的。1。这在全文中的什么位置,开始/中间/结束等等。。?2.您是否在查找单词字母(“John”、“oranges”)或任何字符,直到/之前/之后/之前?在大多数引擎(不是Dot Net)中,分组有一个小小的限制。获取每个匹配的数组信息将被限制为单个级别的固定的、未量化的括号。您可以执行
(John)KC Mary V(oranges)
,但如果执行
(?:(John)KC Mary V(oranges)。+?)+
捕获组1和2将在表达式的每个量化过程中被覆盖。有效地包含John,oranges最后发现的值。文本是一个句子。我正在逐句分析。我认为纽约时报是对的。不可能在单个匹配中获得它。如果可能的话,我希望在单个匹配中获得它。@行-实际上,可以在单个匹配中获得任何类型的文本中包含的每个部分/子字符串/字符或任何其他内容。因此,不可能在单个匹配中获得它,对吗?Roiw。。是的。您的要求是实际捕获字符串的两部分。现在要得到一个表达式,可以使用上面的正则表达式。。