2013-03-12 27 views
-2

使用Ruby,所以我认为这是Perl正则表达式。例如:在':'之后匹配所有内容,直到第一个非空行,然后只匹配除空行外的所有内容

 
E-mail Address: [email protected] 
Billing Address: 

Harry Smith 
3423 My Lane 
SOME CITY, CA 94105 
United States 

我想匹配

E-mail Address: [email protected] 

Billing Address: 

Harry Smith 
3423 My Lane 
SOME CITY, CA 94105 
United States 

任何想法?

这就是我现在所拥有的(KA提供):

/(.+?):(?:\s+)?([\s\S]+?)\r?\n(?=\r?\n)/g 

唯一的问题现在的问题是,它不会停止在该行突破

+0

@Tass更新了我的尝试 – chintanparikh 2013-03-12 02:48:51

+0

谢谢!好多了。 – Tass 2013-03-12 03:02:52

+0

您还需要'帐单地址:'位? – 2013-03-12 03:17:09

回答

1

地址模式与基本的正则表达式::\s+([a-zA-Z\d'-,\s]*?)\s\s+
解释演示在这里:http://regex101.com/r/pU8rY3

地址模式与LookArounds:(?<=Address:\n\n)[a-zA-Z\d'-,\s]*(?=\n\n)
解释演示在这里:http://regex101.com/r/zE7nP6

要经过:直到第一个非空白匹配一切线,然后一切,直到一个空行:
RegEx与捕获:(?<=:)([\S\s]*)\n\n([\s\S]*)(?=\n\n)
解释演示:http://regex101.com/r/yN5kM2

比赛以:字符结尾第一行则一切,直到2换行符:
正则表达式:^(.+?):(?:\s+)?([\s\S]+?)\r?\n(?=\r?\n)
演示:http://regex101.com/r/jW2hR8

5日更新:匹配name: valuename: multiline_value
正则表达式: ^(.+?):(?:[ \t]*(.+)|\s+([\s\S]+?)\r?\n)\r?\n
此处演示:http://regex101.com/r/jR1iK6

+0

,但如果有人在地址中放置两个空格(例如,加拿大地址不常见),这不起作用 – nneonneo 2013-03-12 02:57:23

+0

对不起,我不应该使用地址。它不必是一个地址,它可以是任何东西 – chintanparikh 2013-03-12 02:57:59

+0

@nneonneo :(大约v1)不知道,认为'\ s'在这种情况下会更好,因为它不仅包含'\ n'。(v3) – 2013-03-12 03:12:05

相关问题