gpt4 book ai didi

java - 需要正则表达式来替换文本中的 RTF 控制字。 java

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:58 24 4
gpt4 key购买 nike

我有一个字符串,其中标签可以出现在插入符系统符号内,例如 ^...^。我找到了一个正则表达式,可以在字符串中查找标签,例如 \\^.*?\\^。现在找到标签后,我的标签可以包含 RTf 控制字。并不总是如此,但在某些情况下可以。以下是此类标签 ^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^ 的示例。现在我想替换这个标签中的 RTF 控制字。为此,我尝试创建一个以 \ 开头,可以在斜杠后面包含字母或数字或两者并以空格结尾的正则表达式。并将其替换为空的""。这样我就只剩下LOT-CITY了。我该怎么做。我尝试了以下方法

String tagRegex = "\\^.*?\\^";
Pattern tagRegexPattern = Pattern.compile(tagRegex, Pattern.MULTILINE);
Matcher tagRegexPatternMatcher = tagRegexPattern.matcher(input);
while(tagRegexPatternMatcher.find()) { // work
String tag = tagRegexPatternMatcher.group();
String controlWordRegex = "\\b\\[a-zA-Z]+(-?[0-9]+)? ? \\b";
Pattern controlWordRegexPattern = Pattern.compile(controlWordRegex, Pattern.MULTILINE);
Matcher controlWordRegexPatternMatcher = controlWordRegexPattern.matcher(tag);
while (controlWordRegexPatternMatcher.find()) { // didn't work
String matchedText = controlWordRegexPatternMatcher.group();
}
}

这是我尝试使用的输入

String input = "{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid10175635\\charrsid8585274 \\hich\\af39\\dbch\\af31505\\loch\\f39 Build Job City:\\par \\hich\\af39\\dbch\\af31505\\loch\\f39 ^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^}";

我也尝试了以下\\b\\[a-zA-Z0-9]+\\B。还具有边界和无边界匹配。但没有成功。我怎样才能制作这样的正则表达式?

谢谢

最佳答案

解决这个问题的方法如下:

String input = "{\\rtlch\\fcs1 \\af39\\afs20 \\ltrch\\fcs0 \\fs20\\insrsid10175635\\charrsid8585274 \\hich\\af39\\dbch\\af31505\\loch\\f39 Build Job City:\\par \\hich\\af39\\dbch\\af31505\\loch\\f39 ^L\\hich\\af39\\dbch\\af31505\\loch\\f39 OT-CITY^}";
String tagRegex = "\\^(.*?)\\^";
Pattern tagRegexPattern = Pattern.compile(tagRegex, Pattern.DOTALL);
Matcher tagRegexPatternMatcher = tagRegexPattern.matcher(input);
while(tagRegexPatternMatcher.find()) { // work
String tag = tagRegexPatternMatcher.group(1);
String controlWordRegex = "\\b(?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+ \\b";
System.out.println(tag.replaceAll(controlWordRegex, ""));
}

请参阅Java demo

首先,我在初始正则表达式中添加了一个捕获组来捕获 ^ 符号之间的文本。

然后,第二个正则表达式匹配

  • \\b - 单词边界(之前必须有字符串开头或单词字符)
  • (?:\\\\[a-zA-Z]+(-?[0-9]+)? ?)+ - 非捕获组((?:....),仅用于对模式进行分组以将其作为序列进行匹配)匹配 1 个或多个以下序列:
    • \\\\ - 一个 \
    • [a-zA-Z]+ - 1 个或多个字母
    • (-?[0-9]+)? - 可选的 - 和 1+ 位数字的可选序列
    • ? - 可选空格(为了安全起见,替换为 \\s)
  • \\b - 前导单词边界(后面必须有字符串结尾或单词字符)

此正则表达式在 .replaceAll 方法中使用,以从第一个正则表达式获得的匹配中删除 RTF 代码。

关于java - 需要正则表达式来替换文本中的 RTF 控制字。 java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43071166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com