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

将特定模式与范围匹配的正则表达式

燕成双
2023-03-14
问题内容

我想检查一个字符串是否匹配1-2个字母,1-4个数字和1个字母的模式。(例如: CC44CC4444C )。

我知道这str.matches("^[A-Z]{2}\\d{4}[A-Z]{1}")将完全匹配2个字母,4个数字和1个字母的模式。(例如:
CC4444C

但是,如何使它与范围(即1-2个字母,1-4个数字)匹配的模式呢?

我已经尝试过str.matches("^[A-Z]{1-2}\\d{1-4}[A-Z]{1}"),但是它给了我以下错误:

java.util.regex.PatternSyntaxException: Unclosed counted closure near index 8
^[A-Z]{2-3}\d{1-4}[A-Z]{1}

问题答案:

您需要将{1-2}更改为{1,2},您可以理解为{minimun,maximum}。请运行以下示例并查看结果。

public class RegularExpression {

public static void main(String[] ar) {
    String str1 = "CC44C";
    String str2 = "C4444C";
    String str3 = "4444C";
    String str4 = "SDFSD123C";
    String pattern = "^[A-Z]{1,2}\\d{1,4}[A-Z]{1}";
    System.out.println(str1+" matches?: "+str1.matches(pattern));
    System.out.println(str2+" matches?: "+str2.matches(pattern));
    System.out.println(str3+" matches?: "+str3.matches(pattern));
    System.out.println(str4+" matches?: "+str4.matches(pattern));
}

}

此外,如果您不知道最大值,则可以使用{1,}。

    String newPattern = "^[A-Za-z]{1,}\\d{1,}[A-Za-z]{1,}";

您可以将上面的模式更改为newPattern并查看结果。

希望这可以对您有所帮助:)



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

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。

  • 假设我给出一个模式123*或1234*,我想匹配以该模式开头的任何10位数字。它应该正好有10个数字。 例子: 模式:123应该匹配1234567890但不匹配12345678 我试过这个正则表达式:(^(123)(\d{0,10}))(?(1)\d{10})。。很明显,它不起作用。我试着将图案和剩余的数字分成两组。它匹配捕获组后的10位数字(https://regex101.com/).如何检查

  • 我有一根线,比如: 如何匹配每行的最后一个?顺便说一句,这是我试图在Sublime的文本中做到的。这些值不一致,就像我在这里看到的,我有几百行要替换。 我尝试了,但这与相匹配。

  • 我试图创建一个匹配特定模式的正则表达式,但我想忽略以开头的行。我怎么做? 如果一行不是以哈希开头,它应该被使用,就像我想要阻止攻击性语言一样,在这种情况下,它应该被覆盖。

  • 问题内容: 我在包含一些文本的文本文件中有字符串,如下所示: 我希望在类名之前获取所有内容。 我已经尝试了以下方法,但是我不知道该如何摆脱 我得到以下信息: 而不是我想要的: 关于如何解决此问题的任何指示? 问题答案: 如果不使用捕获组,则可以使用超前(业务)。 应该捕获您想要的一切。这里是细分的: