[英]How to force Regex.Replace to match the '/s' (treat string as single line) regex modifier
我正在使用正則表達式來獲取HTML中兩個字符串之間的字符串。 在里面
Regex101正如預期的那樣令人擔憂。 但是在.NET中它沒有包裝我想要的字符串。 下面是代碼:
html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty);
唯一的區別是我在網站上指定了/s
。 但.NET中的默認值是/g
。有沒有辦法改變它? 謝謝
您可以使用相同方法的重載 :
html = Regex.Replace(html, @"(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)\s*", string.Empty, RegexOptions.SingleLine);
不要將g
(全局)修飾符與s
(單行) aka ( dotall )修飾符混淆。
g
(全局)修飾符表示所有匹配(不在第一次匹配時返回)不存在,這就是為什么在返回多個匹配結果時使用Regex.Matches()
方法的原因。
s
( dotall )修飾符允許點.
跨越換行序列。 默認情況下,點.
與換行序列不匹配。 你可以在這里簡單地使用(?s)
內聯修飾符:
@"(?s)(?<=<strong>CNPJ:)(.*?)(?=hddServidorCaptcha)"
^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.