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

模式/匹配器与字符串。同一正则表达式的split()

微生自怡
2023-03-14

为什么Pattern/Matcher使用(\\d)([a-zA-Z]])但是String.split()不工作?

例如:

String line = "1A2B";

Pattern p = Pattern.compile("(\\d+)([a-zA-Z]+)");
Matcher m = p.matcher(line);
System.out.println(m.groupCount());

while(m.find())
{
    System.out.println(m.group());
}

指纹:

2
1A
2B

但:

    String line = "1A2B";
    String [] arrayOfStrings = line.split("(\\d+)([a-zA-Z]+)");
    System.out.println(arrayOfStrings.length);

    for(String elem: arrayOfStrings){
        System.out.println(elem);
    }

仅打印:

0

共有2个答案

郝原
2023-03-14

为什么它不工作

因为吐痰会消耗这些字符,并且输出列表中没有剩余的字符

解决办法

不完美,但向前看会帮助你

String line = "1A2B";
String [] arrayOfStrings = line.split("(?=\\d+[a-zA-Z]+)");
System.out.println(arrayOfStrings.length);

for(String elem: arrayOfStrings){
    System.out.println(elem);

将输出为

3

1A
2B

不是完美的,因为在字符串的开始处前瞻将为true,因此在索引0处的输出列表中创建一个空字符串。在本例中,您可以看到长度为3,正如我们预期的2

谢财
2023-03-14

这是因为 .split(字符串正则表达式)使用正则表达式来标记中断字符串的位置。所以,在你的情况下,如果你有1A2B£$%^

另一方面,正则表达式的作用是匹配字符串并将它们放入组中。然后,可以在稍后阶段像您一样访问这些组。

 类似资料:
  • 问题内容: 在Swift中,查看字符串是否与模式匹配的简单方法是什么? 伪代码示例: (我已阅读斯威夫特文档并没有看到一个正则表达式的能力。我读过有关增加一个新的运营商是一个好主意,但不是我想,因为这是一个教学项目。我已经尝试了更复杂的,但收到错误:“字符串”没有成员“ rangeOfString”。我正在寻找一种Swift解决方案,即未键入NSRegularExpression。我不需要对匹配结

  • 问题内容: 我有一个输入字符串。 我正在考虑如何有效地将此字符串与多个正则表达式匹配。 我想针对这些正则表达式模式进行匹配,如果其中至少一种匹配则返回: 我不确定如何一次匹配多种模式。有人可以告诉我我们如何有效地做到这一点吗? 问题答案: 如果只有几个正则表达式,并且在编译时都知道它们,那么这就足够了: 如果它们更多,或者它们在运行时加载,则使用模式列表:

  • 有没有一种方法可以在python中编写与以下格式的字符串匹配的正则表达式: 或 在这里,$=表示零或更多的空白可以存在 :来自字符串的固定子集的字符串['feat','fix','docs','断'] :最大长度为n的字符串 :最大长度为m的字符串 前缀应该始终是一个字符串,之后是一些最大q长度的字母数字字符 注意:我们不能省略像应该使用与下面示例中所示完全相同的格式: feat(feat new

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 问题内容: 如何检查整个字符串是否可以与正则表达式匹配?在Java中是方法 问题答案: 您需要结合使用锚(字符串锚的开始)和字符串锚的结束,并通过以下选项进行操作: 或者,您可以传递一个选项数组,其中仅将模式锚定在字符串的开头,您可以省略,但仍然需要锚定在字符串末尾: 观看在线Swift演示 另外,在此处使用with 是一种替代方法: 根据ICU v3,使用正则表达式样式的比较,左手表达式等于右手