当前位置: 首页 > 面试题库 >

使用Java中的regex提取两个特定单词之间的子字符串

云宝
2023-03-14
问题内容

我想使用Java提取某些两个单词之间的子字符串。

例如:

This is an important example about regex for my work.

我想提取“ an”和“ for” 之间的所有内容。

到目前为止,我所做的是:

String sentence = "This is an important example about regex for my work and for me";
Pattern pattern = Pattern.compile("(?<=an).*.(?=for)");
Matcher matcher = pattern.matcher(sentence);

boolean found = false;
while (matcher.find()) {
    System.out.println("I found the text: " + matcher.group().toString());
    found = true;
}
if (!found) {
    System.out.println("I didn't found the text");
}

效果很好。

但是我想做另外两件事

  1. 如果句子是:This is an important example about regex for my work and for me. 我想提取到第一个“ for”即important example about regex

  2. 有时我想将模式之间的单词数限制为3个单词,即 important example about

有什么想法吗?


问题答案:

对于第一个问题,请使其变得懒惰。您可以在问号后面加上一个问号,然后该问号将尽可能少地匹配。

(?<=an).*?(?=for)

我不知道最后的额外内容对不必要的内容有什么.好处.*.

对于第二个问题,您必须定义什么是“单词”。我想在这里说的可能只是一个非空格序列,后面是一个空格。像这样

\S+\s

像这样重复3遍

(?<=an)\s(\S+\s){3}(?=for)

为确保整个单词的模式数学使用单词边界

(?<=\ban\b)\s(\S+\s){1,5}(?=\bfor\b)

看到它在线在这里Regexr

{3} 会精确匹配3个,最小为1个,最大为3个,这样做 {1,3}

替代方案:

正如dma_k在您的情况中正确指出的那样,不必使用后视和前瞻。请参阅此处关于分组的Matcher文档

您可以改用捕获组。只需将要提取的部分放在方括号中,它将被放入捕获组。

\ban\b(.*?)\bfor\b

看到它在线在这里Regexr

您可以像这样访问该组

System.out.println("I found the text: " + matcher.group(1).toString());
                                                        ^

您只有一对方括号,因此简单易用,只需将其1放入matcher.group(1)即可访问第一个捕获组。



 类似资料:
  • 问题内容: 我一直在尝试找出如何在两个特殊字符’和’之间提取字符串的一部分,我一直在研究regex,但坦率地说,我无法理解它 。Java代码示例: 我想拔出89 通常,我只想知道如何在两个特定字符之间提取字符串的一部分。 另外,很高兴知道如何从一开始就将字符串的一部分提取到特定字符,例如21。 问题答案: 试试这个正则表达式: 作为Java字符串文字,您将必须编写如下: 这是一个更完整的示例,演示

  • 问题内容: 我尝试获取<%=和%>之间的字符串,这是我的实现: 它返回 但我的期望是: 我在哪里错了以及如何纠正它? 问题答案: 您的模式很好。但是,您不应该轻信它,应该这样做。以下代码提供了您正在寻找的输出:

  • 问题内容: 我试图从一个较大的字符串中提取一个字符串,使它在’:’和’;’之间得到一切。 当前 期望的输出 问题答案: 你可以试试这个

  • 问题内容: 我有一个像 “ ABC [这是为了提取]” 我想提取Java中的部分。我正在尝试使用split,但是它不能按我想要的方式工作。有人有建议吗? 问题答案: 如果您的字符串中只有一对方括号(),则可以使用:

  • 问题内容: 我有一个字符串,例如:“这是应该使用的URL http://www.google.com/MyDoc.pdf ” 我只需要提取从http开始并以pdf结尾的URL:http: //www.google.com/MyDoc.pdf 这使我的输出为“应使用的http://www.google.com/MyDoc.pdf” 需要帮助。 问题答案: 这种问题是针对正则表达式进行的: 正则表达式