gpt4 book ai didi

Java - 正则表达式 - 用星号替换地址

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:59 27 4
gpt4 key购买 nike

尝试用星号替换该字符串。

这是我正在尝试做的事情:

之前:派克街 100 号 104 单元

变成:100 Pi** 圣* Un** ***

  • 如果不包含单位编号,还必须包含 -

例如:

之前:派克街 100 号

变成:100 Pi** 圣*

我正在使用:这个正则表达式来检查是否超过 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 的右上角面板已对此进行了解释。 。您可以在 this debugger link 观看匹配步骤或进行修改,如果你有兴趣的话。调试器演示了 a RegEx engine 如何可能会逐步消耗一些样本输入字符串并执行匹配过程。

<小时/>

星号数量

如果 * 的数量是一个问题,那么您可能希望捕获所有内容,并使用类似于以下的表达式进行一些简单的计数:

(?i)^(\d+)\s+(\S{2})(.*?)\s+St(.*?)\s*(Unit\s+\d+)?$ 

RegEx Demo 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可视化正则表达式:

enter image description here

关于Java - 正则表达式 - 用星号替换地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149246/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com