java - 使用 java 替换特定模式前面出现的所有字符串

标签 java regex

我已经浏览了堆栈溢出中发布的各种问题来解决我的问题,但我找不到确切的匹配项。所以才问这个。

我有一个模式如下:

    :20: LAIDKZPABCL90165LZJABC
    :90: LZ,90509LAOABCXL,XKPA;AOLZ
    :90C: KDOLASABC9080690ABD
    :90D: ABDBABC906AODIPALKD
    :90L: AND9011112XXXADABC
    :90: AKLZPDOAMXNA,;POAS

在上面的字符串中,我必须将所有(或至少首先)出现的字符串“ABC”替换为前面带有“:90C:”或“:90D:”的“XYZ”。我有以下解决方案,它替换了第一次出现的情况,工作正常。

    String data; // Let data be the string as mentioned above
    Pattern pat = Pattern.compile("(:9(0(C|D)):).*?ABC");
    StringBuffer buf = new StringBuffer(data);
    int endIndex = -1;
    Matcher matcher = pat.matcher(buf2);
    System.out.println(buf.toString());
    while(matcher.find()){
        endIndex = matcher.end();
        buf.replace(endIndex-3, endIndex, "XYZ");

    }
    System.out.println(buf.toString());

在这里我得到了正确的结果。它将第一次出现的“ABC”替换为“XYZ”,前面带有 :90C: 或 :90D:。

有没有什么精确的解决方案可以实现这一点?我无法使用lookbehind,因为我不确定 ABC 在数据中的位置。如果可能的话,需要解决方案来替换所有(前面是 :90C: 或 :90D: 使用正则表达式。我想替换所有是不可能的,因为我们不确定边界。请帮助我解决这个问题。

提前致谢

最佳答案

您可以尝试以下使用前瞻的正则表达式,

(?=:90C:|:90D:)(.*?)ABC(\\S+)

只需将匹配的字符替换为$1XYZ$2即可。

DEMO

关于java - 使用 java 替换特定模式前面出现的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25635373/

相关文章:

Python:十六进制正则表达式问题

python - Pandas 数据框中的正则表达式

java - 如何正确配置属性文件?

java - 如何使用 JsonFormat 注释或任何其他 Spring 日期注释验证即时类型字段的 ISO 标准格式的日期值?

c++ - 如何在 Qt 正则表达式中匹配连字符

java - 检查字符串是否没有字母

javascript - 带或不带/g 的正则表达式 (CoffeeScript/JavaScript)

java - 从内部存储库 maven 控制 jar 名称

java - Android - 无法使用矩阵在坐标处绘制图像

java - 静态场和网络游戏