如何使用正则表达式删除"." 在一个字符串的末尾,也可能在标记内?

Pho*_*nix 3 java regex

我想写一个可以删除"."的正则表达式.最后(可以在centa或centb内)标记并将其放在前面  

String input1 = "this is a &emsp; <centa> test.</centa>" 
String output1 = "this is a .&emsp;<centa> test</centa>" 
Run Code Online (Sandbox Code Playgroud)

要么

 String input1b = "this is a &emsp; <centb> test.</centb>" 
    String output1b = "this is a .&emsp;<centb> test</centb>" 
Run Code Online (Sandbox Code Playgroud)

要么

String input3 = "this is a &emsp; test." 
String output3 = "this is a .&emsp; test" 
Run Code Online (Sandbox Code Playgroud)

我只能在字符串上使用replaceAll,所以如何在下面的代码中创建模式?更换字符串应该是什么?

Pattern rulerPattern1 = Pattern.compile("", Pattern.MULTILINE);
System.out.println(rulerPattern1.matcher(input1).replaceAll(""));
Run Code Online (Sandbox Code Playgroud)

请求者在评论中提出了这一边缘案例

string input4 = "&ldquo;[<deleted.material>[</deleted.material>]&sect;&ensp;431:10A&ndash;126&em??sp;[<deleted.material>]Chemotherapy services.</deleted.material>] <added.material>Cancer treatment.</added.material>test snl."
string output4 = "&ldquo;[<deleted.material>[</deleted.material>]&sect;&ensp;431:10A&ndash;126.&em??sp;[<deleted.material>]Chemotherapy services.</deleted.material>] <added.material>Cancer treatment.</added.material>test snl"
Run Code Online (Sandbox Code Playgroud)

Ro *_* Mi 5

描述

这个正则表达式将找到查找&emsp;并将字符串中的最后一个点移动到之前&emsp;

正则表达式: ([&]emsp;[^.]*)\.

用...来代替 .$1

在此输入图像描述

给出输入文本样本:

this is a &emsp; <centa> test.</centa>
this is a &emsp; <centb> test.</centb> 
this is a &emsp; test.
Run Code Online (Sandbox Code Playgroud)

这将分别返回以下行

this is a .&emsp;<centa> test</centa>
this is a .&emsp;<centb> test</centb>
this is a .&emsp; test
Run Code Online (Sandbox Code Playgroud)

如果您要移动字符串中的最后一个点,那么您可以使用它

正则表达式: ([&]em??sp;.*)\.

用...来代替 .$1

在此输入图像描述

根据您的输入文字:

&ldquo;[<deleted.material>[</deleted.material>]&sect;&ensp;431:10A&ndash;126&em??sp;[<deleted.material>]Chemotherapy services.</deleted.material>] <added.material>Cancer treatment.</added.material>test snl.
Run Code Online (Sandbox Code Playgroud)

返回

&ldquo;[<deleted.material>[</deleted.material>]&sect;&ensp;431:10A&ndash;126.&em??sp;[<deleted.material>]Chemotherapy services.</deleted.material>] <added.material>Cancer treatment.</added.material>test snl
Run Code Online (Sandbox Code Playgroud)

  • @ Edward Falk,是的我正在使用debuggex.com.虽然它不支持lookbehinds或原子组,但它仍然可以方便地理解表达式流程.还有regexper.com.他们也做得很好,但是当你打字的时候,这不是实时的. (2认同)