Java如何基于前面的字符从字符串中删除撇号

Java如何基于前面的字符从字符串中删除撇号,java,regex,Java,Regex,我想删除基于前面字符的字符串中的撇号。请告诉我最有效的方法。如果在字符串中发现撇号,并且前面的字符是{D,L,O,D,L,O},那么我想保留撇号。任何其他字母,请将其删除 几个例子: Name |Expected outcome F'redricks |Fredricks D'Angelo |D'Angelo O’Brien |O'Brien L'Beam |L'Beam d'Angelo |d'Angelo o’Brien |o'Brien

我想删除基于前面字符的字符串中的撇号。请告诉我最有效的方法。如果在字符串中发现撇号,并且前面的字符是{D,L,O,D,L,O},那么我想保留撇号。任何其他字母,请将其删除

几个例子:

Name        |Expected outcome
F'redricks  |Fredricks
D'Angelo    |D'Angelo
O’Brien     |O'Brien
L'Beam      |L'Beam
d'Angelo    |d'Angelo
o’Brien     |o'Brien
l'Beam      |l'Beam
'''AAAA'''' |AAAA
'D'Angelo   |D'Angelo   
‘O’Brien    |O'Brien
‘L'Beam     |L'Beam

您可以使用正则表达式替换为:


这将删除前面没有d、l或o的任何撇号。“i”标志表示不区分大小写。

玩具反斗城会发生什么?@JimGarrison可能与S'mores发生的情况相同。提示:你不能使用像正则表达式这样简单的东西来处理现实世界中发生的所有变化。我在一家出版公司工作了7年,不得不处理邮件列表的标准化,而我们遇到的最困难的问题之一就是这个。我们开发了一个庞大的名称格式正确的查找表,但即使这样,也从未达到99%以上的准确率,这在处理数十万条记录时不是很好。
input = input.replaceAll("(?i)(?<![dlo])'", "");