{{1}}
我想得到五个文字; (重要的一些标签未关闭)
{{1}}
如何使用RegEx解决此问题?或者另一种方式?
答案 0 :(得分:2)
此正则表达式(.*) (.*) .*#(\d+)#
将起作用。
但是这里第一个和第二个字段不能包含任何空格。
您可以使用Pattern Matcher将此正则表达式与java一起使用。 以下是http://www.ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-1/的示例:
import java.util.regex.*;
public class ReplaceDemo {
public static void main(String[] args) {
String input =
"User clientId=23421. Some more text clientId=33432. This clientNum=100";
Pattern p = Pattern.compile("(clientId=)(\\d+)");
Matcher m = p.matcher(input);
StringBuffer result = new StringBuffer();
while (m.find()) {
System.out.println("Masking: " + m.group(2));
m.appendReplacement(result, m.group(1) + "***masked***");
}
m.appendTail(result);
System.out.println(result);
}
}
答案 1 :(得分:0)
修改强>
您可以根据#
令牌之间的标记进行拆分。这是一个示例代码:
public class RegexTest {
public static void main(String []args) {
// Input text
String text1 = "Java programming #data#2016#/data#.";
// Split based on # tokens
String[] text1Split = text1.split("#[^#]*#");
// Print result
System.out.println(text1 + ": ");
for(int i = 0; i < text1Split.length; ++i) {
System.out.println("Split[" + i + "] : " + text1Split[i]);
}
}
}
这将打印:
Java programming #data#2016#/data#.:
Split[0] : Java programming
Split[1] : 2016
Split[2] : .
如果要删除点,可以将正则表达式更改为#[^#]*#\\.?
。
如果您需要更复杂的东西,则需要更复杂的解析,因为某些标签甚至没有关闭。这个问题没有通用的解决方案,但您可以编写一个适合您需求的简单解析器。
请记住,正则表达式不适合HTML
解析,因此在您的情况下不是最佳选择。