代码之家  ›  专栏  ›  技术社区  ›  Akhil

将连续的单个字符匹配为整个单词

  •  1
  • Akhil  · 技术社区  · 8 年前

    当从字符串列表中筛选时,我想将连续的单个字符作为整个单词进行匹配

    e、 g.串下

    'm g road'
    'some a b c d limited'
    

    在第一种情况下 如果用户类型

    "mg" or "m g" or "m g road" or "mg road"
    

    在第二种情况下 如果用户类型

    "some abcd" or "some a b c d" or "abcd" or "a b c d"
    

    我如何做到这一点,我可以使用regex实现吗?

    我现在可以通过逐个搜索单词来处理整个单词的顺序, 但不确定如何将连续的单个字符视为单个单词

    例如 “mg道路” “道路mg” 我可以通过搜索来处理 “毫克” “道路” 逐一地

    编辑

    为了使需求更加清晰,下面是我的测试用例

    @Test
    public void testRemoveSpaceFromConsecutiveSingleCharacters() throws Exception {
        Assert.assertTrue(Main.removeSpaceFromConsecutiveSingleCharacters("some a b c d limited").equals("some abcd limited"));
        Assert.assertTrue(Main.removeSpaceFromConsecutiveSingleCharacters("m g road").equals("mg road"));
        Assert.assertTrue(Main.removeSpaceFromConsecutiveSingleCharacters("bank a b c").equals("bank abc"));
        Assert.assertTrue(Main.removeSpaceFromConsecutiveSingleCharacters("bank a b c limited n a").equals("bank abc limited na"));
        Assert.assertTrue(Main.removeSpaceFromConsecutiveSingleCharacters("c road").equals("c road"));
    }
    
    6 回复  |  直到 8 年前
        1
  •  1
  •   Community Egal    7 年前

    1.)从 穿绳短裙 用户输入 .

    .replaceAll("(?<=\\b\\w) +(?=\\w\\b)","")
    

    See demo at regexplanet (click Java)

    2.)检查 穿绳短裙 .contains 用户输入 .

        2
  •  1
  •   Ted Hopp    8 年前

    听起来你只是想忽略空白。您可以通过在查找匹配之前从目标字符串和用户输入中删除空白来轻松做到这一点。

        3
  •  1
  •   Bohemian    8 年前

    您基本上希望修改每个搜索词以允许插入空格,因此

    "abcd" becomes regex "\ba ?b ?c ?d\b"
    

    要实现这一点,请在匹配之前对每个单词执行以下操作:

    word = "\\b" + word.replaceAll("(?<=.)(?=.)", " ?") + "\\b";
    

    单词断了 \b 必须停止匹配 "comma bcd" "abc duck" .

        4
  •  1
  •   Alan Moore Chris Ballance    8 年前

    此正则表达式将匹配由一个或多个空格分隔的所有单个字符

    (^(\w\s+)+)|(\s+\w)+$|((\s+\w)+\s+)
    
        5
  •  0
  •   Jan    8 年前

    以下正则表达式(在多行模式下)可以帮助您:

    ^(?<first>\w+)(?<chars>(?:.(?!(?:\b\w{2,}\b)))*)
    # assure that it is the beginning of the line
    # capture as many word characters as possible in the first group "first"
    # the construction afterwards consumes everything up to (not including)
    # a word which has at least two characters...
    # ... and saves it to the group called "chars"
    

    您只需要替换第二组中的空白(又名“ 字符 ").
    查看演示 on regex101.com

        6
  •  -1
  •   anaxin    8 年前
    str = str.replaceAll("\\s","");