我需要一个正则表达式,让我接受另一个词。 例如:
street address Maria and another st. lohberg and give me another av. darrwerg and another st example
所需的输出是:
maria,lohberg,darrwerd,example
Maybye如果有正则表达式可以解决这种情况:address: herman poortstrat this is text but not address
给我:herman poortstrat
但它比我认为的更复杂。
我有以下正则表达式:(?<=\bstreet\s)(\w+)
但它只给我一个带有空格的街道地址。
我的正则表达式在&#34; street&#34;之后给我发短信。所以它可能是解决方案之一,但我需要更多的单词,如:"av.","av","av ","address"
和其他组合。
一般来说,我想从文本中获取街道名称而不是其他内容。不是街道,它的数量只有街道。我的正则表达方式还不好,所以我请求你的帮助。
答案 0 :(得分:2)
这将为您提供地址, st。或 av。之后的字样 您可以根据需要调整它
public static void main(String[] args) {
String str = "street address Santa Maria and another st. lohberg and give me another av. darrwerg and another st street";
Pattern p = Pattern.compile("((address|st\\.|av\\.)\\s)(\\w+?\\s)");
Matcher m = p.matcher(str);
List<String> streets = new ArrayList<String>();
while (m.find()) {
streets.add(m.group(3));
}
System.out.println(streets);
}
答案 1 :(得分:1)
您需要使用
\b(?:street\s+address|(?:av|st)\b\.?)\s*(\w+)
请参阅regex demo
<强>详情
\b
- 字边界(?:street\s+address|(?:av|st)\b\.?)
- 非捕获组匹配
street\s+address
- street
,1 +空格,address
|
- 或(?:av|st)\b\.?
- av
或st
作为整个单词后跟可选的点\s*
- 0个或更多空格 (\w+)
- 第1组:一个或多个单词字符String s = "street address Maria and another st. lohberg and give me another av. darrwerg and another st example";
Pattern p = Pattern.compile("\\b(?:street\\s+address|(?:av|st)\\b\\.?)\\s*(\\w+)", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
while (m.find()){
System.out.println("Value: " + m.group(1));
}
结果:
Value: Maria
Value: lohberg
Value: darrwerg
Value: example