尝试这个:
编辑:这也适用(?<=XYZ|Test) (?=Sans)。
(?<=XYZ) (?=Sans)|(?<=Test) (?=Sans)
1-(?<=XYZ) (?=Sans)匹配XYZ前面的空格,但不包括XYZ作为该匹配的一部分,同时空格后面应该跟Sans,但不要' t 包括 Sans 作为匹配的一部分,我们只想要空间 。这部分将匹配XYZ Sans之间的第一个空格
2- | 交替运算符| ,就像Boolean OR 如果正则表达式的第一部分(即| 之前的模式)匹配空格 ,则正则表达式的第二部分(即,|) 之后的模式将被忽略,这不是我们想要的,因为我们必须添加 g 修饰符,这意味着获取所有匹配项并且在第一次匹配后不返回。见live demo。检查g 修饰符并尝试取消设置并查看结果。它是正则表达式模式之后的g,看起来像/(?<=XYZ) (?=Sans)|(?<=Test) (?=Sans)/g <<
3-(?<=Test) (?=Sans)匹配Test前面的空格,但不包括Test作为匹配的一部分,同时空格后面应该跟Sans,但不要' t 包括 Sans 作为匹配的一部分,我们只想要空间。这部分将匹配Test Sans 之间的第二个空格
编辑:这是另一个正则表达式模式,将匹配-font: 值内存在的任何空格,它是动态的。
(?<=-font:s*['"][^'"]*?)s(?=[^'"]*)
见live demo。
"data-template='Test xxx' root{--primary-font:'XYZ Sans';--secondary-font:'Test Sans';--hero-background:#ffbe3f;--header-colour-highlight:#f0591e;--header-background:#ffffff;--header-colour-tabs:#1d2130; }"
执行您想要的 C# 代码是这样的:
笔记:我更新了代码中的正则表达式模式。
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
string input = ""data-template='Test xxx' root{--primary-font:'XYZ Sans';--secondary-font:'Test Sans';--hero-background:#ffbe3f;--header-colour-highlight:#f0591e;--header-background:#ffffff;--header-colour-tabs:#1d2130; }"";
string pattern = @"(?<=-font:s*['"][^'"]*?)s(?=[^'"]*)";
string replacement = "";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine("Original String: {0}", input);
Console.WriteLine("
-----------------
");
Console.WriteLine("Replacement String: {0}", result);
}
}