当前位置: 首页 > 知识库问答 >
问题:

使用reg ex提取匹配的字符串

乜心思
2023-03-14

我搜索了与Java正则表达式相关的问题,并找到了关于模式和匹配器类的信息,以获得关于reg-ex匹配条件的一组文本。

但是,我的要求不同,我希望提取正则表达式所表示的实际文本。

例:

Input text: ABC 22. XYZ
Regular expression: (.*) [0-9]* (.*)

使用Pattern和Matcher类(或Java中的任何其他方式),如何获得文本“22”?这是正则表达式所代表的文本。

共有3个答案

娄嘉石
2023-03-14

您的输入在“22”之后有一个点,但您的正则表达式不占那个点。

如果输入中只有一个数字,可以按如下方式提取:

String number = input.replaceAll(".*?(\\d+).*", "$1");

此正则表达式匹配输入中任何位置的(第一个)数字(任何长度),而不管输入的其余部分是什么。

端木令
2023-03-14

你的抓捕小组已经关闭。

Pattern p = Pattern.compile ("(\\d+\\.?)");
Matcher m = p.matcher ("ABC 22. XYZ");
if (m.find ()) {
  System.out.println  (m.group (1));
}

使用and定义捕获组,以后可以通过组索引从匹配器中检索。组0总是整个匹配。

严瀚昂
2023-03-14

您可以尝试以下正则表达式1

.*?(\s*\d+\.\s+).*

使用一些图形工具2,您可以看到正则表达式中的组在哪里,即:

要提取该组,请在Java中执行以下操作:

String input = "ABC 22. XYZ";

System.out.println(
    input.replaceAll(".*?(\\s*\\d+\\.\\s+).*", "$1")
);  // prints " 22. "

其中1美元被替换为group#1

笔记

>

NODE         EXPLANATION
------------------------------------------------------------------
  .*?        any character except \n (0 or more times
             (matching the least amount possible))
------------------------------------------------------------------
  (          group and capture to \1:
------------------------------------------------------------------
    \s*        whitespace (\n, \r, \t, \f, and " ") (0
               or more times (matching the most amount
               possible))
------------------------------------------------------------------
    \d+        digits (0-9) (1 or more times (matching
               the most amount possible))
------------------------------------------------------------------
    \.         '.'
------------------------------------------------------------------
    \s+        whitespace (\n, \r, \t, \f, and " ") (1
               or more times (matching the most amount
               possible))
------------------------------------------------------------------
  )          end of \1
------------------------------------------------------------------
  .*         any character except \n (0 or more times
             (matching the most amount possible))

获得截图的工具是Regexer。

 类似资料:
  • 问题内容: 我正在尝试解析以下类型的字符串: 里面有任意键:“ val”对。我想获取键名和值。对于那些好奇的人,我试图解析任务战士的数据库格式。 这是我的测试字符串: 这是要强调的是,除了空格,冒号周围没有空格而且值始终用双引号引起来,键或值中的任何内容都可以位于键或值中。 在节点中,这是我的输出: 而且也符合这种模式。如何找回所有比赛? 问题答案: 继续循环调用以获取所有匹配项:

  • 我在创建正则表达式以匹配这些内置组时需要一些帮助: 我尝试了以下匹配模式,但它给了我一些错误: 错误代码: 这是预览:https://regex101.com/r/WKal3Y/1

  • 我尝试了这种模式,但发现第一个匹配的句子带有符号

  • 使用Java11,我想知道如何使用流应用编程接口将所有组匹配提取到一行程序中的字符串列表。 给定此regexp和字符串: 我知道如何在多行中获得结果: 这将打印3个不同数字字符串的预期列表:[123,8,90] 我试图在一条航线上实现同样的目标: 这将打印意外的:[123-8-90] 如何在流中使用MatchResult::group(int)方法?

  • 我对正则表达式是新手。 以下是我到目前为止在C#中所做的工作 显然,这并不违反所有指定的规则。有人能给点提示吗?

  • 问题内容: 我认为我遇到了一个听起来比实际容易的问题……我不太确定。我想定义一个正则表达式,并且要构建一些与之匹配的字符串。 我可以导入具有该功能的任何模块吗?最好不要使用或暴力破解方法。必须有一种更优雅的方法来做到这一点。 问题答案: 我一直在研究一个小的帮助程序库,用于使用Python生成随机字符串 它包含一个方法,该方法允许您从正则表达式创建字符串: 目前,它适用于大多数基本正则表达式。