两个字符串之间的正则表达式字符串

时间:2012-01-30 12:43:27

标签: regex

如何在两个常量文本之间获取文本?

示例:

<rate curr="KRW" unit="100">19,94</rate>

19,94

介于

之间
"<rate curr="KRW" unit="100">"

"</rate>"

其他例子:

ABCDEF

获取子串 ABEF = CD

6 个答案:

答案 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>

正则表达式可能无法正确处理此角点。