【问题标题】:Need Regular Expression for matching all permutations of a given word需要正则表达式来匹配给定单词的所有排列
【发布时间】:2017-09-09 15:09:29
【问题描述】:

我正在解决一个问题,我需要匹配目标字符串中给定单词的不同大小写不敏感的排列。

例如:

要匹配的单词:cAda

目标字符串:AbrAcadAbRa

在这里,可以在目标字符串 S 中找到 2 个可能的排列是 Acad 和 cadA。

我写过这样的:

    String pattern = "" ;

    for(char ch : word.toCharArray()){
        pattern = pattern + "(?=[\\s\\S]*(" + ch + "))" ;
    }
    pattern = "^" + pattern + "*$";

    Pattern r = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE);

它不起作用。

【问题讨论】:

  • 正则表达式不适合这项任务。如果你想要所有排列,正则表达式应该包含所有排列,而不是一个单词。
  • this demo
  • 你能告诉我如何通过一些代码,我还在学习正则表达式
  • @WiktorStribiżew:这是我最初的想法,但因为aaaa 也会匹配,所以这行不通:字符组包含[a...]{4},因此排列不需要考虑所有字符.

标签: java regex algorithm pattern-matching sliding-window


【解决方案1】:

正则表达式不是此任务的最佳工具。您必须为每个输入单词生成一个新的正则表达式。并非不可能,但过于复杂。

最好对目标词的字母进行排序,然后对输入词的每个 n 长子串进行排序,看看它们是否与排序后的目标词匹配。

因此,给定目标词“cAda”,您对其进行排序以给出“Aacd”。

用户输入“AbrAcadAbRa”

因此,您获取第一个 4 个字母的子字符串“AbrA”,对其进行排序以获得“AAbr”,然后将其与排序后的目标进行检查。没有匹配。然后取“brAc”,对其进行排序并检查。然后是“Acad”等

有一些潜在的优化可以避免排序,但对于小字符串,它们可能并不重要。

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    相关资源
    最近更新 更多