java - 字符串replaceALL与匹配前后字母的条件

标签 java regex conditional-statements replaceall

我正在从文本文件中读取字符串

示例:密西西比州是一个拥有大量系统的州吗?

我正在尝试使用全部替换来将所有“s”和“S”替换为相同大小写的“t”或“T”,除非位于单词开头并且除非在“s”或“S”之前或之后"还有另一个“s”或“S”。

预期输出:密西西比州是一个有很多系统的州吗?

我已经尝试过了...

.replaceAll("[^sStT](?!\\b)S", "T").replaceAll("[^SstT](?!\\b)s", "t"); 

输出是...“t Mtstsippi 是一个有很多 Sttet 的州?”

最佳答案

您可以使用两个 replaceAll 来完成此操作来电。一个 s -> t和一个 S -> T

您可以使用后视 (?<=regex)和前瞻 (?=regex)组来查找模式而不替换其内容。

后视将检查 s 之前的字符不在字符列表中 [^<list>] 。该列表包括起始字符 ^sStT和空格\\s

(?<=[^^\\ssStT])

前瞻将进行类似的检查,但仅验证下一个字符不是 sS

(?=[^sS])

把这些放在一起:

String test = "Is Mississippi a State where there are a lot of Systems?";
System.out.println(test
        .replaceAll("(?<=[^^\\ssStT])s(?=[^sS])","t")
        .replaceAll("(?<=[^^\\ssStT])S(?=[^sS])","T")
);

关于java - 字符串replaceALL与匹配前后字母的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410944/

相关文章:

java - Android - TextView maxWidth 奇怪的问题

Java 二叉树插入无法正常工作

java - 基于速度的平滑运动和可预测的持续时间

regex - grep 不使用正则表达式在 xml 上返回预期结果

python - 使用正则表达式从行迭代中获取信息并将数据存储在嵌套字典中

javascript - Vue.js 和 Moment.js : Condition for deleting a comment

r - 检查一个 df 的每组是否至少有两个值与另一个 df 组匹配

java - 前端与后端端点(spring boot 和 vuejs)

regex - 从 Google Analytics 中排除 IP - 为什么这不是有效的正则表达式?

python - 识别点并返回该点的值,保留最高值作为引用