RegEx Match可以以不同的单词结束

时间:2014-01-16 19:48:00

标签: c# regex

我想匹配几行,但它们可以结束不同。使用“注册商:”或“注册:”。

所以我天真地尝试了这个:

Registrant's address:(\s*)(?<Value>.*).*((Registrar:)|(Registered:))

这个OR运营商我有什么问题?

(目标是直接从WhoIs服务器使用RegEx从不同的tld中提取数据)

1。数据

  

域名:           argos.co.uk

Registrant:
    Argos Ltd

Registrant type:
    UK Public Limited Company, (Company number: 1081551)

Registrant's address:
    Avebury
    489-499 Avebury Boulevard
    Central Milton Keynes
    Milton Keynes
    MK9 2NW
    United Kingdom

Registered through:
    NetNames Limited
    URL: http://www.netnames.co.uk

我想要这个:

    Avebury
    489-499 Avebury Boulevard
    Central Milton Keynes
    Milton Keynes
    MK9 2NW
    United Kingdom

2。数据

Domain name:
    amazon.co.uk

Registrant:
    Amazon Europe Holding Technologies SCS

Registrant type:
    Unknown

Registrant's address:
    65 boulevard G-D. Charlotte
    Luxembourg City
    Luxembourg
    LU-1311
    Luxembourg

Registrar:
    Amazon.com [Tag = AMAZON-COM]
    URL: http://www.amazon.com

Relevant dates:
    Registered on: before Aug-1996
    Expiry date:  05-Dec-2020
    Last updated:  23-Oct-2013

我想要这个:

    65 boulevard G-D. Charlotte
    Luxembourg City
    Luxembourg
    LU-1311
    Luxembourg

3 个答案:

答案 0 :(得分:3)

这似乎你不需要正则表达式

var result = String.Join(Environment.NewLine, File.ReadLines(filename)
                .SkipWhile(x => !x.StartsWith("Registrant's address:"))
                .Skip(1)
                .TakeWhile(x => !String.IsNullOrEmpty(x)));

答案 1 :(得分:2)

正则表达式中的:根本不在您的文字中,如果您尚未允许RegexOptions.Singleline匹配新行,则需要指定.

Registrant's address:(\s*)(?<Value>.*).*((Registrar)|(Registered))

您有许多可能不必要的捕获组。

Registrant's address:\s*(?<Value>.*).*Regist(?:rar|ered)

另外请注意,如果您在尝试匹配的文本中有连续记录,则可能会遇到贪婪匹配问题。添加一些?将解决问题:

Registrant's address:\s*(?<Value>.*?).*?Regist(?:rar|ered)

答案 2 :(得分:1)

您可以使用以下正则表达式仅匹配您需要的数据,而无需捕获不必要的数据。

使用环绕声断言:

(?<=Registrant's address:).*(?=(?:Registrar:|Registered:))

工作示例:

http://regex101.com/r/cN5wP3

确保使用RegexOptions.Singleline

修改

要捕获指定组value中的匹配,您将拥有以下内容:

(?<=Registrant's address:)(?<value>.*)(?=(?:Registrar:|Registered:))

示例:

http://regex101.com/r/fY3oR9