匹配':'之后的所有内容,直到第一个非空白行,然后只匹配除空行之外的所有内容

时间:2013-03-12 02:45:05

标签: ruby regex

使用Ruby,所以我认为这是Perl正则表达式。例如:

E-mail Address:  user123@gmail.com
Billing Address:

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

我想匹配

E-mail Address: user123@gmail.com

Billing Address:

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

有什么想法吗?

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

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

现在唯一的问题是它不会在该换行符时停止匹配user123@gmail.com

2 个答案:

答案 0 :(得分: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次换行:
RegExp:^(.+?):(?:\s+)?([\s\S]+?)\r?\n(?=\r?\n)
演示:http://regex101.com/r/jW2hR8

第5次更新:匹配 name: valuename: multiline_value
RegExp:^(.+?):(?:[ \t]*(.+)|\s+([\s\S]+?)\r?\n)\r?\n
在这里演示:http://regex101.com/r/jR1iK6

答案 1 :(得分:0)

/^.*:\n\n([\w\W]*?)\n(?=\n)/

http://rubular.com/r/BHEDW4sElE

基本上,这匹配行的开头,然后匹配冒号,然后是两个换行符(一个空行),然后是一个以换行符结尾的文本块,后跟一个空行。