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

4
如何获取两个常量文本之间的文本?
示例:
<rate curr="KRW" unit="100">19,94</rate>

19.94

介于之间

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

并且

"</rate>"

其他例子:

ABCDEF

获取在ABEF之间的子字符串= CD


2
他来了 - fredley
1
你在使用哪种语言/工具? - Qtax
6个回答

5

请尝试以下方法:

/<rate[^>]*>(.*?)<\/rate>/

然而,最好不要在HTML中使用正则表达式

我期望得到类似于 /<rate curr="KRW" unit="100">(.*?)</rate> 这样的形式,而不是一般的形式,尽管它可能会起作用。 - user669677

2
我使用的方法是使用“match all”。
matched = Regex.Matches(result, @"(?<=<rate curr=\"KRW\" unit=\"100\">)(.*?)(?=</rate>)");

然后逐一获取,使用match[i].Groups[1].value

1
如果您正在分析HTML,则最好使用JavaScript和.innerHTML()。正则表达式有点过度了。

+1 我也会用 PHP 和 strip_tags 表达相同的意思。 - cmbuckley

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视为纯文本处理时有意识地使用正则表达式是无害的。


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。


-1
我建议您使用HTML解析器。定义HTML的语法是上下文无关的语法,基本上太复杂了,不能通过正则表达式进行解析。即使您设法编写一个可以实现您想要的功能的正则表达式,但可能会在某些边缘情况下失败。
例如,如果您需要解析以下HTML,该怎么办?
<rate curr="KRW" unit="100"><rate curr="KRW" unit="100">19,94</rate></rate>

正则表达式可能无法正确处理这种边缘情况。


1
在这种情况下,它永远不会看起来像那样,即使它看起来像那样,我也不在乎。我只想知道如何使用正则表达式来查找两个文本之间的文本。 - user669677

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接