Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式删除模式中的首字母_Java_Regex - Fatal编程技术网

Java 使用正则表达式删除模式中的首字母

Java 使用正则表达式删除模式中的首字母,java,regex,Java,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.match

我试图用正则表达式删除指定的模式,但作为替换,它也替换了想要的字符。在这种情况下,指定边界没有帮助

 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);
输入:Dr.Dre或Dr.Dre或Dr.Dre

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

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

对于上述程序,我接收的输出为: . 数据记录设备 而所需的输出是:
正则表达式中的点表示“任何字符”。您需要使用反斜杠对其进行转义,而反斜杠又需要以字符串文字进行转义:

Pattern p = Pattern.compile("Mr\\.|MR\\.|Dr\\.|mr\\.|DR\\.|dr\\.|ms\\."); // etc
请注意,从“Dr.”或“Dr.Dre”中删除“Dr.”之后,您将得到一个双空格


编辑:出于某种原因(我还没有弄清楚原因),点后的空格不算作单词边界。如果您将模式更改为使用
\\s
而不是
\\b
,则替换单个空白字符,它适用于“Dr.Dre”-但如注释中所述,它随后对“Dr.Dre”无效。您可以完全删除单词边界,并在模式的后面部分添加一个空格(“DR | DR |”等),或者使用
(\\s |\\b)
,这适用于我尝试过的情况,但可能有其他不希望的副作用。

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

Pattern p = Pattern.compile("Mr\\.|MR\\.|Dr\\.|mr\\.|DR\\.|dr\\.|ms\\."); // etc
请注意,从“Dr.”或“Dr.Dre”中删除“Dr.”之后,您将得到一个双空格


编辑:出于某种原因(我还没有弄清楚原因),点后的空格不算作单词边界。如果您将模式更改为使用
\\s
而不是
\\b
,则替换单个空白字符,它适用于“Dr.Dre”-但如注释中所述,它随后对“Dr.Dre”无效。您可以完全删除单词边界,并在模式的后面部分添加一个空格(“DR | DR |”等),或者使用
(\\s |\\b)
,这适用于我尝试过的情况,但可能会有其他不良副作用。

问题有点不清楚(您没有提供有问题的结果),但我猜问题在于使用句点字符。句点在正则表达式中有一个含义-它匹配任何字符,因此“Dr.”实际上将匹配*Dr.D*re。你必须像“Dr”一样转义,或者在你的代码中,特别是转义斜杠,像这样:“Dr\”


希望有帮助

问题有点不清楚(您没有提供有问题的结果),但我猜问题在于使用句点字符。句点在正则表达式中有一个含义-它匹配任何字符,因此“Dr.”实际上将匹配*Dr.D*re。你必须像“Dr”一样转义,或者在你的代码中,特别是转义斜杠,像这样:“Dr\”


希望有帮助

@user595169:嗯,你的评论没有意义-你对工作和不工作都给出了相同的输入…对不起,更正一下:1。输入:Dr.Dre->输出:dre2。输入:Dr.Dre->输出:。Drefor输入为“Dr.DRE”,输出为“.DRE”@user595169:你真的不应该,我测试它时也没有。请展示一个简短但完整的程序来演示这一点-将其编辑到问题中。我期望“DRE”的输出。@user595169:那是因为模式中还有
“| MR | MR | MR | Dr | Dr | ms | ms | miss | miss | Mrs | Mrs”
。你需要让团队更贪婪地捕获-看看我能做些什么。@user595169:嗯,你的评论没有意义-你对工作和不工作都给出了相同的输入…对不起,更正一下:1。输入:Dr.Dre->输出:dre2。输入:Dr.Dre->输出:。Drefor输入为“Dr.DRE”,输出为“.DRE”@user595169:你真的不应该,我测试它时也没有。请展示一个简短但完整的程序来演示这一点-将其编辑到问题中。我期望“DRE”的输出。@user595169:那是因为模式中还有
“| MR | MR | MR | Dr | Dr | ms | ms | miss | miss | Mrs | Mrs”
。你需要让团队更贪婪地捕捉,看看我能做些什么。