gpt4 book ai didi

java - 使用正则表达式来削减模式中的首字母

转载 作者:行者123 更新时间:2023-11-29 10:04:29 26 4
gpt4 key购买 nike

我正在尝试使用 regex 删除指定的模式,但在替换中也替换了想要的字符。在这种情况下指定边界没有帮助。

 String name = "Dr.Dre" ;  
Pattern p = Pattern.compile("(Mr.|MR.|Dr.|mr.|DR.|dr.|ms.|Ms.|MS.|Miss.|Mrs.|mrs.|miss.|MR|mr|Mr|Dr|DR|dr|ms|Ms|MS|miss|Miss|Mrs|mrs)"+"\\b");
Matcher m = p.matcher(name);
StringBuffer sb = new StringBuffer();
String namef = m.replaceAll("");
System.out.println(namef);

Input : Dr.Dre or Dr Dre or Dr. Dre

> 输出(预期):Dre 或 Dre 或 Dre

编辑:

感谢您的帮助,但我面临的正则表达式问题很少:程序:

String name = "Dr. Dre" ;  
Pattern p = Pattern.compile("(Mr\\.|MR\\.|Dr\\.|mr\\.|DR\\.|dr\\.|ms\\.|Ms\\.|MS\\.|Miss\\.|Mrs\\.|mrs\\.|miss\\.|MR|mr|Mr|Dr|DR|dr|ms|Ms|MS|miss|Miss|Mrs|mrs)"+"\\b");
Matcher m = p.matcher(name);
String namef = m.replaceAll("");
System.out.println(namef);

对于上述程序,我收到的输出为:.德雷而所需的输出是:德雷

最佳答案

正则表达式中的点表示“任何字符”。您需要使用反斜杠对其进行转义,而反斜杠又需要在字符串文字中进行转义:

Pattern p = Pattern.compile("Mr\\.|MR\\.|Dr\\.|mr\\.|DR\\.|dr\\.|ms\\."); // etc

请注意,在删除“Dr.”后您将得到一个双倍空格。不过来自“or Dr. Dre”……

编辑:出于某种原因(我还没有弄清楚为什么),点后的空格不算作单词边界。如果您将模式更改为使用 \\s 而不是 \\b,那么替换单个空白字符,它适用于“Dr. Dre” - 但如评论,然后它对“Dr.Dre”失败。您可以完全删除单词边界并在模式的后面部分添加一个空格(“DR |Dr |”等)或使用适用于我尝试过的案例,但很可能有其他不良副作用。

关于java - 使用正则表达式来削减模式中的首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13227848/

26 4 0
文章推荐: javascript - 如何使用页面 JavaScript 检查是否安装了 Firefox WebExtension?
文章推荐: java - 如何每秒移动 jlabel?
文章推荐: java - 如何将多维数组与数组列表一起使用?
文章推荐: java - 使用 equals 方法获取 List 中的对象?