【问题标题】:.NET regex multiline help - regular expression.NET 正则表达式多行帮助 - 正则表达式
【发布时间】:2010-10-23 03:22:11
【问题描述】:

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

[Site Url="http://medportal.domain.edu" Owner="DOMAIN\user1" SecondaryOwner="DOMAIN\user2" ContentDatabase="WSS_Content_$1" StorageUsedMB="0.8" StorageWarningMB="0" StorageMaxMB= “0”/] [站点 URL="http://medportal.domain.edu/sites/ahSC" 所有者="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(Url=)(?.)\s(.)\s(ContentDatabase=)(?.)\s(StorageUsedMB= )(.*)

替换:

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

谢谢。

【问题讨论】:

    标签: .net regex replace match


    【解决方案1】:

    您当前的模式是贪婪的,并且从结果替换来看,匹配的次数超出了预期。 “贪婪”意味着.* 的使用量超出了您的预期,因此要使其不贪婪,您需要在其后添加?,以便它匹配尽可能少的字符:.*?

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

    试试这个模式:

    string pattern = @"\[.+?Url=(?<url>"".+?"").+?ContentDatabase=(?<databasename>"".+?"").+?]";
    string replacement = "stsadm.exe -o deletecontentdb -url ${url} -databasename ${databasename} -databaseserver myfixedservername";
    string result = Regex.Replace(input, pattern, replacement);
    Console.WriteLine(result);
    

    【讨论】:

      猜你喜欢
      • 2021-09-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多