如何在两个常量文本之间获取文本?
示例:
<rate curr="KRW" unit="100">19,94</rate>
19,94
介于
之间"<rate curr="KRW" unit="100">"
和
"</rate>"
其他例子:
ABCDEF
获取子串
AB
和EF
= CD
答案 0 :(得分:5)
尝试:
/<rate[^>]*>(.*?)<\/rate>/
然而,不使用HTML格式会更好。
答案 1 :(得分:2)
我这样做的方法是使用全部匹配
matched = Regex.Matches(result, @"(?<=<rate curr=\"KRW\" unit=\"100\">)(.*?)(?=</rate>)");
然后使用match[i].Groups[1].value
答案 2 :(得分:1)
如果您正在分析HTML,那么最好使用javascript和.innerHTML()。正则表达式有点矫枉过正。
答案 3 :(得分:0)
如果你想要一个通用的解决方案,即找到两个字符串之间的字符串你可以使用Pattern.quote()
[或用\Q
和\E
包裹字符串来引用开始和结束字符串并使用(.*?)
进行非贪婪的比赛。
在下面的代码段中查看其使用示例
@Test
public void quoteText(){
String str1 = "<rate curr=\"KRW\" unit=\"100\">";
String str2 = "</rate>";
String input = "<rate curr=\"KRW\" unit=\"100\">19,94</rate>"
+"<rate curr=\"KRW\" unit=\"100\"></rate>"
+"<rate curr=\"KRW\" unit=\"100\">19,96</rate>";
String regex = Pattern.quote(str1)+"(.*?)"+Pattern.quote(str2);
System.out.println("regex:"+regex);
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
while(m.find()){
String group = m.group(1);
System.out.println("--"+group);
}
<强>输出强>
regex:\Q<rate curr="KRW" unit="100">\E(.*?)\Q</rate>\E
--19,94
--
--19,96
注意:虽然不建议使用正则表达式来解析整个HTML,但我认为将HTML视为纯文本时有意识地使用正则表达式没有任何害处
答案 4 :(得分:0)
您正在寻找的简单正则表达式匹配字符串是:
(?<=<rate curr=\"KRW\" unit=\"100\">)(.*?)(?=</rate>)
例如,在Ruby中,这将转换为:
string = '<rate curr="KRW" unit="100">19,94</rate>'
string.match("(?<=<rate curr=\"KRW\" unit=\"100\">)(.*?)(?=</rate>)").to_s
# => "19,94"
感谢Will Yu。
答案 5 :(得分:-1)
我建议您使用HTML解析器。定义HTML的语法是一种无上下文的语法,从根本上说太复杂了,无法通过正则表达式进行解析。即使你设法编写一个能够达到你想要的正则表达式,但在某些极端情况下可能会失败。
例如,如果您需要解析以下HTML,该怎么办?
<rate curr="KRW" unit="100"><rate curr="KRW" unit="100">19,94</rate></rate>
正则表达式可能无法正确处理此角点。