gpt4 book ai didi

Java 正则表达式 : Match text between two strings with boundary conditions

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:32 25 4
gpt4 key购买 nike

我想匹配两个字符串之间的文本,但起始字符串有严格的边界条件。

示例输入:

start
From: h
From:b
xyz
Subject:
end

我需要在 From: 之间进行匹配和 Subject: .

如果我使用 (From:.*).*(Subject:)使用 dotall,它产生

From: h
From:b
xyz
Subject:

但我只需要

From:b
xyz
Subject:

因为起始字符串有严格的边界条件。这是必要的,因为起始字符串可以在文档中的任何位置,然后上面的正则表达式将匹配大文本而不是几行。

%%%%%%%%%%%% 问题重新定义 %%%%%%%%%%%%%%我有需要匹配的文本:

From:<any text>
To:<any text>
Subject:<any text>

要注意的是:所有三个组件都可以在一行中,可以由一个换行符分隔,或者可以由 2 个换行符分隔...在所需匹配项前后的文本可能包含 From:<any text> ,这就是为什么我需要严格的界限。

最佳答案

试试这个:

String input = "start From: h From:b xyz Subject: end";
Matcher matcher = Pattern.compile("(?<=^((?!From:).)*(From: [A-Za-z0-9] ))(.+?)(Subject:)").matcher(input);
if (matcher.find())
{
System.out.println(matcher.group());
}

输出:From:b xyz Subject: .


正则表达式((?<=^((?!From:).)*(From: [A-Za-z0-9] ))(.+?)(Subject:))的解释:

  • (?<=开始向后看
  • ^字符串的开头
  • ((?!From:).)如果向前看,看不到“发件人:”,则匹配任何字符
  • *匹配前面的语句零次或多次
  • (From: [A-Za-z0-9] ))匹配第一个“发件人:”及其内容
  • )不要向后看
  • (.+?)匹配我们正在寻找的字符串
  • (Subject:)匹配主题字段

关于Java 正则表达式 : Match text between two strings with boundary conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com