【问题标题】:Use Regular Expression To Identify Identical Strings in Java在 Java 中使用正则表达式来识别相同的字符串
【发布时间】:2021-09-21 20:46:38
【问题描述】:

抱歉,这可能是一个愚蠢的问题,但我对正则表达式完全陌生。

我必须识别给定模式的某些字符串是否相同,是否可以使用正则表达式来识别下面的模式?这些字符串在我的项目中应该被同等对待。

foo
foo(1)
foo(2)
foo(1)(1)
foo(1)(2)

foo(any number)(any number)(...)(...)

有什么帮助吗?提前致谢。

【问题讨论】:

  • 猜测这样的事情应该这样做:foo(\([0-9]*\))*() 之间的任何东西都是一个组,* 表示它可以重复 0 次或更多次。

标签: java regex


【解决方案1】:

可以使用regex[A-Za-z]+(?:\(\d+\))*,具体解释如下:

  • [A-Za-z]+: 任意字母一次或多次
  • (?:: 非捕获组开始
    • \(:人物(
    • \d+:一位或多位数字
    • \):人物)
  • ):非捕获组结束
  • *:零次或多次

【讨论】:

    【解决方案2】:

    这应该可以解决问题:

    ([A-z]+)(:?\(\d+\))*
    
    • ([A-z]+) 捕获 foo 或任何其他由多个字母组成的文本并将其保存在第 1 组中
    • (:?\(\d+\))*(<1 or more digits>) 0 次或多次

    正则表达式并非旨在将字符串相互比较。您可以将输入与模式匹配。

    您可以在此处针对您的输入进行测试:https://regex101.com/r/MRZxsS/1

    【讨论】:

    • 非常感谢!
    • 如果你想在java中使用它,你需要转义反斜杠以便将它压缩成String:"[A-z]+(:?\\(\\d+\\))*"
    • 但这并不能说明它们是否都相同。例如,fff 不应被视为与 foo 相同,但 foo(3) 应与 foo 相同。
    • 没有。您要求匹配所有输入值的正则表达式,这意味着您可以在所有这些示例字符串上使用正则表达式,并且正则表达式匹配每个字符串。
    • 我编辑了正则表达式,以便将foofff 检索为matcher.,group(1),以便您进行比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    相关资源
    最近更新 更多