【问题标题】:Replace a string using Regular Expression使用正则表达式替换字符串
【发布时间】:2015-02-27 18:19:59
【问题描述】:

我正在尝试使用 c#

替换 CSS text 中的媒体查询

我只有声明

 @media  screen and (min-width:1500px)

我也有新媒体

@media  screen and (min-width:1500px)
{  
 .g{
     border:1px solid red;
   }
}

我的目标是使用 regexr 用新媒体替换旧媒体

我设法在这里完成了这项任务

http://regexr.com/3a58a

使用这个表达式

@media\s*screen\sand[\s*]\(min-width:1500px\)([\s,\n,\r]*\{[\s,\n,\r]*.*[\s,\n,\r]*[\s,\n,\r]*.*[\s,\n,\r]*\}*\s*\})

但在 c# 中,它似乎标记了媒体及其下方的所有角色,而不是仅标记媒体。

这是处理此案的c#

  NewCss= Regex.Replace(cssContent, Media_declaration.Replace(" ", "[\\s,\\n,\\r]*").Replace("(", "\\(").Replace(")", "\\)") + @"([\s,\n,\r]*\{[\s,\n,\r]*.*[\s,\n,\r]*[\s,\n,\r]*.*[\s,\n,\r]*\}*\s*\})", new MatchEvaluator(mediaNeVal), RegexOptions.Singleline);

在哪里

Media_declaration=@media screen and (min-width:1500px)

是否可以使用 Media_declaration 仅标记媒体查询,以便我可以替换特定文本?

【问题讨论】:

  • 所以你想保留媒体行并在它下面替换{ .g{ border:1px solid red; }} ??
  • 我想更换媒体线及其下方,但更换下方也是一个不错的解决方案。
  • 我还是一头雾水,你要这么做吗? ideone.com/2LKKfL
  • 我现在清楚我使用的表达方式不对
  • 我有一个包含很多角色和媒体查询的 css 文件。我想替换文本中的特定媒体。该媒体可以一行或单独一行,正则表达式应该为所有情况提供解决方案。我只有旧媒体行:@媒体屏幕和 (min-width:1500px) 和新媒体 vlues:@媒体屏幕和(最小宽度:1500px){ .g {font-family:Georgia; }} 新值应该替换旧媒体

标签: c# regex


【解决方案1】:

您使用的表达式匹配直到最后一个大括号的所有文本,因为它(在两个地方)使用了 greedy .*。请改用 非贪婪 .*?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2015-11-30
    • 2021-11-29
    相关资源
    最近更新 更多