0

我正在寻找一个从以下格式获取所有数据的正则表达式:

">DATA<" returns "DATA"

"> DATA <" returns " DATA "

">.4930894812948cm <" returns ".4930894812948cm "

"> 939j@$%^^ < > << <" returns " 939j@$%^^ < > << "

">DATA< blah blah blah >DATA123< BLah >DATA456<" returns "DATA", "DATA123" and "DATA456"

(示例中的引号是为了使它们更易于阅读;它们不应出现在实际结果中。)

DATA 可以是任何编码

>DATA<可以位于文本文件中的任何位置,因此可以一个接一个地重复。同样,所有数据是指所有数据,包括\n, \r, ., 保留字符等。

我试过>(.*?)<了,但没有用。

我正在用 Java 做这个。

添加另一个示例:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Integer facilisis neque tellus, eget rhoncus sapien. 
Pellentesque placerat purus non eros auctor ut consectetur magna bibendum. 
Nam sollicitudin cursus >urna< nec varius. 
Pellentesque elit augue, semper non porttitor nec, adipiscing ut ligula. 
Cras accumsan >dolor< augue. 
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. >Sed< >rhoncus< ultrices elementum. 

    >lac
    us<

 Ut elementum condimentum est > pir. < feugiat.

应标记:

"urna"
"dolor"
"Sed"
"rhoncus"
"la
    cus"
" pir. "

...包括它们之间的空格和行分隔符。希望这可以帮助。

4

3 回答 3

2

Here's the regex you want:

>(.*)<

You don't want to use the lazy operator (?). The lazy operator makes the wildcard stop as early as possible and still continue the regex (So it stops at the FIRST <), however without the ?, the wildcard is greedy and will match all characters, and then work backwards until it locates the LAST <.

于 2012-06-28T02:13:21.787 回答
0

很难准确地辨别 OP 想要什么,但是......

>([^<]*)<将返回 > 和 < 之间的值,包括可能介于两者之间的任何字符(包括 > 和空格)。

所以:

"> ABC <" 将返回 " ABC "

"> AB>C>D<" 将返回 "AB>C>D"

"> ABC" 将不返回任何内容

测试用例在这里:fiddle。(单击“Java”链接。)

于 2012-06-28T02:19:47.467 回答
0

如果介于两者之间的数据不是随机的,我建议使用 global + multiline \>([^\<])*\<。但是,由于数据随机的,我认为您无法想出一个正则表达式来可靠地捕获所有可能介于>和之间的字符<

于 2012-06-28T02:21:17.340 回答