Java 正则表达式替换字符串和特定字符串除外

Java 正则表达式替换字符串和特定字符串除外,java,regex,Java,Regex,结果是: 这是一本书!→我是一个男孩。→他是个好人。→我的朋友史密斯太太。→罗伊是个好人。→他是个好人。→错过。明星是我的朋友 但我想要的是: 这是一本书!→我是一个男孩。→他是个好人。→我的朋友罗伊夫人是个好人。→他是个好人。→错过。明星是我的朋友 我不想添加“→" 在一些字符串“先生”、“小姐”、“太太”、“女士”之后。 → 标记是句子的开头 谢谢~!如果你想在测试中匹配一个写得好的句子,你应该先匹配大写或小写,然后匹配任何不是引号的句子,然后再匹配其中一个。 然后不匹配特殊群体,如Dr、M

结果是:

这是一本书!→我是一个男孩。→他是个好人。→我的朋友史密斯太太。→罗伊是个好人。→他是个好人。→错过。明星是我的朋友

但我想要的是:

这是一本书!→我是一个男孩。→他是个好人。→我的朋友罗伊夫人是个好人。→他是个好人。→错过。明星是我的朋友

我不想添加“→" 在一些字符串“先生”、“小姐”、“太太”、“女士”之后。 → 标记是句子的开头


谢谢~!

如果你想在测试中匹配一个写得好的句子,你应该先匹配大写或小写,然后匹配任何不是引号的句子,然后再匹配其中一个。 然后不匹配特殊群体,如Dr、Mr、Mrs等

String a = "This is a book! I am a boy. He is a good man. My friend Mrs. Roy is good man. He is nice person. Miss. Star is my friend.";
String b = Pattern.compile("([a-zA-Z]+)([.!?])( )([A-Z]+)",Pattern.CASE_INSENSITIVE).matcher(a).replaceAll("$1$2 →$4");
匹配列表中不存在的单个字符

第二种选择

([^.!?]|(?<=Dr|Mr|Mrs|\b[A-Za-z]|\s)[.!?])*

*
[^.!?]
Dr按字面意思匹配字符Dr、Mr、Mrs(区分大小写)

第二种选择

Dr|Mr|Mrs
两个小组

 \b[A-Za-z]\s
匹配列表中的单个字符


这并不是那么容易。你必须解释所有可能的缩写,而且有很多。还有一些引语需要处理。我想你可能需要更多地考虑你的业务规则:我能看到小姐。明星是我的朋友。是两个正确的句子,还是一个年轻女子是你的朋友。即使你确实指定了小姐,先生等。将有一些边缘案例会导致问题。
(?<=Dr|Mr|Mrs|\b[A-Za-z]|\s)[.!?]
(?<=Dr|Mr|Mrs|\b[A-Za-z]|\s)
Dr|Mr|Mrs
 \b[A-Za-z]\s
[.!?]