【问题标题】:Need java Regex to remove/replace the XML elements from specific string需要 java Regex 从特定字符串中删除/替换 XML 元素
【发布时间】:2015-06-29 16:16:16
【问题描述】:

我在获取正确的正则表达式时遇到问题。我将以下 xml 作为字符串

<user_input>
<UserInput Question="test Q?" Answer=<value>0</value><sam@testmail.com>"
</user_input>

现在我只需要从 Answer 属性中删除 xml 字符。 所以我需要以下内容:-

<user_input>
<UserInput Question="test Q?" Answer=value0value sam@testmail.com"
</user_input>

我尝试了下面的正则表达式,但没有成功:-

str1.replaceAll("Answer=.*?<([^<]*)>", "$1");

它删除了之前的所有文本..

有人可以帮忙吗?

【问题讨论】:

  • 你能详细说明“没有解决”吗?
  • 那么,您还想在&gt;&lt; 所在的位置插入一个空格吗?我们可以在任意位置用空格替换所有&gt;&lt; 吗?您不能同时删除和插入,您需要 2 个正则表达式,或 1 个正则表达式和一个简单的替换。

标签: java regex


【解决方案1】:

虽然 Java 不支持可变宽度的后视,但您可以使用 .{0,1000} 解决它,这应该足够了。

请使用 2 个正则表达式或 1 个正则表达式和 1 个 replace 检查此方法。选择最适合的(我从第一个输入字符串中删除了\n 换行符,以显示使用简单replace 的缺陷):

String input = "<user_input><UserInput Question=\"test Q?\" Answer=<value>0</value><sam@testmail.com>\"\n</user_input>";
String st = input.replace("><", " ").replaceAll("(?<=Answer=.{0,1000})[<>/]+(?=[^\"]*\")", "");
String st1 = input.replaceAll("(?<=Answer=.{0,1000})><(?=[^\"]*\")", " ").replaceAll("(?<=Answer=.{0,1000})[<>/]+(?=[^\"]*\")", "");
System.out.println(st + "\n" + st1);

sample program 的输出:

<user_input UserInput Question="test Q?" Answer=value0value sam@testmail.com"                                                                                                                                                                          
</user_input>  

<user_input><UserInput Question="test Q?" Answer=value0value sam@testmail.com"                                                                                                                                                                         
</user_input>  

【讨论】:

    【解决方案2】:

    httpRequest.send("msg="+data+"&amp;TC="+TC);这样试试

    【讨论】:

      【解决方案3】:

      您需要将? 放在第一组中以使其不贪婪,您也不需要Answer=.*?

      str1.replaceAll("<([^<]*?)>", "$1")
      

      DEMO

      【讨论】:

      • 我只需要在 Answer Attribute 中删除它。如果我的字符串包含其他一些有效的 xml,例如 ,它不应该触及它。在 Answer="" 之外,它不应该做任何事情
      • @samash 所以使用正则表达式不是解析(X)Html 的好选择,你可以考虑一个合适的解析器!
      • 我测试了上面它没有完全工作。它也替换了用户输入的标签。
      • 问题是我们不必解析 XML,因为我们是中间件,并且答案属性中的 xml sn-p 正在为终端系统创建问题。所以有任何正则表达式可以解决我的问题?
      • 不,我们没有解析 xml 的选项。但我很确定通过正则表达式可以完成
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 2015-11-19
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      相关资源
      最近更新 更多