我有一个像"hello, dflk 1234 12345678, wod-=0, 87654321"
这样的输入字符串,我希望获得所有“单词”的列表,这些单词与正则表达式模式"\d{8}"
不对应(连续八位)。 / p>
我研究过java.util.regex api doc,但是我无法找到一种方法将否定正则表达式“\ d {8}”放在一起。这是我想用它的方式:
String input = "hello, dflk 1234 12345678, wod-=0, 87654321";
List<String> hitList = new ArrayList<>();
Pattern p = Pattern.compile(...?...); //<- how to define the regex pattern?
Matcher m = p.matcher(input);
while(m.find()) {
hitList.add(m.group());
}
我想在我的hitList中拥有所有这些(基于上面的输入字符串):
"hello," "dflk" "1234" "," "wod-=0,"
你能建议一种定义正则表达式模式的方法吗?
答案 0 :(得分:0)
一种方式(可能是最简单的方法)是过滤生成的匹配列表。
另一个是消极的前瞻和更多的外观:
(?<=^|\s|\d{8})(?!\d{8})\S+(?=$|\s|\d{8})
我认为,漂亮是不同的。
快速PowerShell测试:
PS Home:\> [regex]::Matches('hello, dflk 1234 12345678, wod-=0, 87654321', '(?<=^|\s|\d{8})(?!\d{8})\S+(?=$|\s|\d{8})')|
select -exp Value
hello,
dflk
1234
,
wod-=0,
答案 1 :(得分:0)
我已经使用替换了你的源字符串,其中找到了带有空字符串的模式,然后使用String split函数来获取除模式之外的所有字符串
String test = "hello, dflk 1234 12345678, wod-=0, 87654321";
test = test.replaceAll("\\d{8}", "");
String result[] = test.split("\\ ");
for (String value : result) {
System.out.println(value);
}
}
我已经测试了上述解决方案 希望这对你有所帮助。
答案 2 :(得分:0)
这可能是你正在寻找的正则表达式(请记住,当你把它放在一个字符串中时你需要转义\):
(?<!\s)(?!\d{8}(\s|$))\S+