从字符串列表中过滤时,我希望将连续的单个字符匹配为整个单词
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"
我如何做到这一点,我能用正则表达式来实现吗?
我现在可以逐个搜索单词来处理整个单词的顺序,但不确定如何将连续的单个单词视为单个单词
e.g。 “mg road”或“road mg”我可以通过搜索“mg”和“road”来处理一个人
修改
为了使要求更加明确,以下是我的测试用例
@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"));
}
答案 0 :(得分:1)
听起来你只想忽略空格。您可以通过在查找匹配项之前从目标字符串和用户输入中删除空格来轻松完成此操作。
答案 1 :(得分:1)
您基本上希望修改每个搜索字词以允许插入空格,所以
"abcd" becomes regex "\ba ?b ?c ?d\b"
要实现此目的,请在匹配前对每个单词执行此操作:
word = "\\b" + word.replaceAll("(?<=.)(?=.)", " ?") + "\\b";
单词分解\b
是停止匹配"comma bcd"
或"abc duck"
所必需的。
答案 2 :(得分:1)
此正则表达式将匹配由一个或多个空格分隔的所有单个字符
(^(\w\s+)+)|(\s+\w)+$|((\s+\w)+\s+)
答案 3 :(得分:1)
1。)从 stringtocheck 和 userinput 中删除空格包围的单个字母内的空格。
.replaceAll("(?<=\\b\\w) +(?=\\w\\b)","")
(?<=\b\w)
look后面检查是否有\b
word boundary,\w
word character (?=\\w\\b)
展望未来,检查后跟\w
字符\b
字边界See demo at regexplanet (click Java)
2.)检查 stringtocheck .contains userinput 。
答案 4 :(得分:0)
以下正则表达式(在多线模式下)可以帮助您:
^(?<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"
您只需要替换第二组中的空格(又名“ chars ”)。
查看演示on regex101.com
答案 5 :(得分:-1)
str = str.replaceAll("\\s","");