java - Java - 正则表达式 - 用星号替换地址
问题描述
试图用星号替换这个字符串。
这是我正在尝试做的事情:
之前:派克街 100 号 104 单元
变为:100 Pi** St* Un** ***
- 如果它不包含单元号,也必须包括 -
例如:
之前:派克街 100 号
变为:100 Pi** St*
我正在使用:这个正则表达式来检查是否有超过 1 个数字
(?:\d.*?){1}
String[] splitAddress = address.split("");
Pattern pattern = Pattern.compile("(?:\\d.*?){1}"); Matcher matcher = pattern.matcher(address); boolean isMatched = matcher.matches(); System.out.println(isMatched);
我在这里做错了什么?请帮忙。谢谢!
解决方案
也许,类似于,
(?i)^(\\d+)\\s+(\\S{2}).*?\\s+St.*?(Unit\\s+\\d+)?$
可以调查一下。
您可能想if
为第三个捕获组编写一个语句,该组具有Unit
. 如果该组不是空的,那么您将为此连接另一个组*
。
测试
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "(?i)^(\\d+)\\s+(\\S{2}).*?\\s+St.*?(Unit\\s+\\d+)?$";
final String string = "100 Pike St. Unit 104\n"
+ "100 Pike St.\n"
+ "100 Pike and Salmon STREET Unit 104\n"
+ "100 Pike and Salmon ST.";
final String subst = "$1 $2** St*";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
final String result = matcher.replaceAll(subst);
System.out.println(result);
}
}
输出
100 Pi** St*
100 Pi** St*
100 Pi** St*
100 Pi** St*
如果您希望简化/更新/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。
星号数
如果数量*
是一个问题,那么您可能想要捕获所有内容,为此进行一些简单的计数,表达式类似于:
(?i)^(\d+)\s+(\S{2})(.*?)\s+St(.*?)\s*(Unit\s+\d+)?$
正则表达式演示 2
测试 2
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "(?i)^(\\d+)\\s+(\\S{2})(.*?)\\s+St(.*?)\\s*(Unit\\s+\\d+)?$";
final String string = "100 Pike St. Unit 104\n"
+ "100 Pike St.\n"
+ "100 Pike and Salmon STREET Unit 104\n"
+ "100 Pike and Salmon ST.";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
输出 2
Full match: 100 Pike St. Unit 104
Group 1: 100
Group 2: Pi
Group 3: ke
Group 4: .
Group 5: Unit 104
Full match: 100 Pike St.
Group 1: 100
Group 2: Pi
Group 3: ke
Group 4: .
Group 5: null
Full match: 100 Pike and Salmon STREET Unit 104
Group 1: 100
Group 2: Pi
Group 3: ke and Salmon
Group 4: REET
Group 5: Unit 104
Full match: 100 Pike and Salmon ST.
Group 1: 100
Group 2: Pi
Group 3: ke and Salmon
Group 4: .
Group 5: null
正则表达式电路
jex.im可视化正则表达式:
推荐阅读
- apache-kafka - S3 Kafka 接收器连接器中是否有办法确保所有记录都被使用
- wordpress - Wordpress“CURLOPT_SSL_VERIFYHOST”已关闭
- python - 将 json 从 aws-glue 保存到 postgres,jsonb 类型列
- emacs - Doom Emacs:不想在 Slime-REPL 中自动完成
- swiftui - SwiftUI如何在不切换标签栏的情况下刷新一个标签视图
- android - google-cloud-speech 中的依赖冲突
- java - 附加错误从哪里来?
- javascript - 查找具有相同 prop 的对象并返回更新值及其关联的 prop
- php - Lumen 8.x 文件系统不工作。错误:未找到“League\Flysystem\AwsS3v3\AwsS3Adapter”类
- mysql - 如何使用 mysql 函数从 sting 中获取 id?