.NET正则表达式多行帮助 - 正则表达式

时间:2010-10-23 03:22:11

标签: .net regex replace match

我有一个像这样的多行字符串。 Ity有换行符。

[Site Url =“http://medportal.domain.edu”Owner =“DOMAIN \ user1”SecondaryOwner =“DOMAIN \ user2”ContentDatabase =“WSS_Content_ $ 1”StorageUsedMB =“0.8”StorageWarningMB =“0”StorageMaxMB = “0”/]   [Site Url =“http://medportal.domain.edu/sites/ahSC”Owner =“DOMAIN \ user1”ContentDatabase =“WSS_Content_ahSC”StorageUsedMB =“22.3”StorageWarningMB =“0”StorageMaxMB =“0”/]   [Site Url =“http://medportal.domain.edu/sites/ARCTIC”Owner =“DOMAIN \ user1”ContentDatabase =“WSS_Content_ARCTIC”StorageUsedMB =“0.1”StorageWarningMB =“0”StorageMaxMB =“0”/]

我需要提取并格式化出如下所示的字符串:

stsadm.exe -o deletecontentdb -url“http://medportal.domain.edu”-databasename“WSS_Content_ $ 1”-databaseserver myfixedservername

两个参数是Url和ContentDatabase。

这个模式几乎可以工作,但是它可以获取额外的东西,无法处理多行

)\ S(地址=)(?)\ S()\ S(ContentDatabase =)(?)\ S(StorageUsedMB = )(。*)

取代:

stsadm.exe -o deletecontentdb -url $ {url} -databasename $ {databasename} -databaseserver myfixedservername

谢谢。

1 个答案:

答案 0 :(得分:1)

您当前的模式是贪婪的,并且与最终的替换相匹配。 “贪婪”意味着.*的使用比你想要的更多,所以要使它非贪婪,你需要在它之后添加?,以便它匹配尽可能少的字符:{ {1}}。

.*?这样的模式是贪婪的,因为你希望它在遇到的第一个引号处停止,但它实际上会继续匹配内容,直到它到达字符串中的最终引号(如果存在)。非贪婪的解决方案是使用\".*\"\".+?\"

请尝试使用此模式:

\"[^\"]+\"