【问题标题】:How to replace the text in two substrings of a string?如何替换字符串的两个子字符串中的文本?
【发布时间】:2014-01-26 01:41:24
【问题描述】:

我有一个要求,我得到一个字符串,我必须在其中替换

之间的值
< p811:Credential> and   < /p811:Credential>

在这种情况下AAAAA/BBBBBB)

只有凭据文本始终保持不变,前缀不必相同

示例字符串

1.abc &lt; p811:Credential&gt;AAAAA/BBBBBB&lt; /p811:Credential&gt;xyz
2.gsd&lt; K999:Credential&gt;EEEEE/XXXXX&lt; / K999:Credential&gt;tre

我们怎样才能做到这一点?

【问题讨论】:

  • 前后分别是什么?
  • 我已编辑问题以使其更清晰
  • 将是该行中唯一的内容,对吧?
  • @Fathah Rehman P 不,它是字符串的一部分,并且字符串中的内容与凭据不同。下面 2 个字符串 2 个可能的字符串我可以得到 1.abc AAAAA/BBBBBBxyz 2.gsdEEEEE/XXXXX K999:Credential>tre

标签: java regex string


【解决方案1】:

为了解决你的具体问题,你可以给出这个代码:

line=" gsd< K999:Credential>EEEEE/XXXXX< / K999:Credential>tre";
String REGEX="(?<=Credential\\W?>)(\\w|\\d|/)*(?=<\\W?/\\W?(\\w|\\d)+:Credential\\W?>)";

line = line.replaceAll(REGEX, word_to_replace);
System.out.println(line);

【讨论】:

  • 很抱歉不提这个,p811 不必总是相同,即它也可以是这样 gsdEEEEE/XXXXX K999:Credential>tre
  • 你能给样本可接受的输入和不可接受的输入吗?
  • 字符串替换=""+replaceWord+"";如果我们有这样的字符串 gsdEEEEE/XXXXX K999:Credential>tre 你怎么替换它
  • 这个解决方案的问题是它会匹配&lt;abc:Credential&gt;foo&lt;/xyz:Credential&gt;
  • @Bohemian :我给出了第二个解决方案来解决他的具体问题。 NO 第二个解决方案肯定不会匹配 foo 。为什么我因为错误而给出了具体代码:stackoverflow.com/questions/20706793/…
【解决方案2】:
String search = "abc < p811:Credential>AAAAA/BBBBBB< /p811:Credential>xyz";

String regex = "(^.*?< ?[a-zA-Z0-9]{4}:Credential>)(.*?)(< ?/ ?[a-zA-Z0-9]{4}:Credential>.*?$)";
String replacement = "$1Replacement Text$3";

String result = search.replaceAll(regex, replacement);

我在正则表达式中放置了 3 个捕获组:

  • .........&lt; XXXX:Credential&gt;
  • >XXXX/XXXXX
  • &lt; / XXXX:Credential&gt;.........

然后简单地放置一个简单的替换文本,它使用反向引用 $1$3 来保留所需匹配左侧和右侧的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多