正则表达式:关于?=和任何字符的问题

时间:2019-09-21 04:11:11

标签: c# regex

我有一个目标字符串,例如:

   "addr: line1 
         line2

      tel:12345678"

注意:在第2行和电话之间,可能有1条或多条新行:\ r \ n或\ r \ n \ r \ n或更多。 我想得到的结果如下:

   "addr: line1 
         line2"

第2行下没有\ r \ n。

我的问题是:

1)如果我使用

  

/ addr [\ s \ S] +(?=(\ r \ n)+ tel)/

,我将获得不带tel的地址,但是我无法摆脱“ line2”下的“ \ r \ n”,我该怎么办?

2)我知道[\ s \ S]代表包括\ r,\ n的任何字符,并且(。| \ n | \ r)也可以做到这一点。   但是为什么[。\ n]不能呢?就像[\ s \ S]的语法一样吗?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

您需要将第一个“ +”设为非贪婪,以使其与“ tel”之前的整个空格不匹配

  var regex = new Regex(@"addr.+?(?=\s+tel)", RegexOptions.Singleline);
  var result = regex.Match(text).Value;