[英]RegEx Match can end with different words
我想匹配幾行,但它們可以結束不同。 使用“注冊商:”或“注冊:”。
所以我天真地試過這個:
Registrant's address:(\s*)(?<Value>.*).*((Registrar:)|(Registered:))
這個OR運算符怎么了?
(目標是直接從WhoIs服務器使用RegEx從不同的tlds中獲取數據)
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 GD. 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 GD. Charlotte Luxembourg City Luxembourg LU-1311 Luxembourg
看來你這里不需要正則表達式
var result = String.Join(Environment.NewLine, File.ReadLines(filename)
.SkipWhile(x => !x.StartsWith("Registrant's address:"))
.Skip(1)
.TakeWhile(x => !String.IsNullOrEmpty(x)));
:
你的正則表達式中根本不存在你的文本中,如果你還沒有允許的話,你需要指定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)
您可以使用以下正則表達式僅匹配所需的數據,而無需捕獲不必要的數據。
使用環繞聲斷言:
(?<=Registrant's address:).*(?=(?:Registrar:|Registered:))
工作范例:
只需確保使用RegexOptions.Singleline
。
編輯:
要捕獲命名組value
的匹配,您將擁有:
(?<=Registrant's address:)(?<value>.*)(?=(?:Registrar:|Registered:))
例:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.