【问题标题】:Regex to find and replace spaces within pattern正则表达式查找和替换模式中的空格
【发布时间】:2022-11-11 23:47:44
【问题描述】:

我有以下字符串:

"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; }"

我需要替换 -font:'XYZ Sans'-font:'Test Sans' 中的空格以使其成为 -font:'XYZSans'-font:'TestSans'

编辑:-font: 中的文本可能会改变它不是静态的。

有人可以帮忙吗?

【问题讨论】:

  • 您使用哪种编程语言?
  • 如果您期望两个以上的段由空格分隔,这可能是最简单的两次传递:一次从-font 变量中获取值,另一次替换其中的空格。否则,应该这样做sed -E "s/-font:'(\S*)\s+(\S*)';/-font:'\1\2';/g"

标签: c# string removing-whitespace


【解决方案1】:

尝试这个:

编辑:这也适用(?<=XYZ|Test) (?=Sans)

(?<=XYZ) (?=Sans)|(?<=Test) (?=Sans)

1-(?&lt;=XYZ) (?=Sans)匹配XYZ前面的空格,但不包括XYZ作为该匹配的一部分,同时空格后面应该跟Sans,但不要' t 包括 Sans 作为匹配的一部分,我们只想要空间 。这部分将匹配XYZ Sans之间的第一个空格

2- | 交替运算符| ,就像Boolean OR 如果正则表达式的第一部分(即| 之前的模式)匹配空格 ,则正则表达式的第二部分(即,|) 之后的模式将被忽略,这不是我们想要的,因为我们必须添加 g 修饰符,这意味着获取所有匹配项并且在第一次匹配后不返回。见live demo。检查g 修饰符并尝试取消设置并查看结果。它是正则表达式模式之后的g,看起来像/(?&lt;=XYZ) (?=Sans)|(?&lt;=Test) (?=Sans)/g <<

3-(?&lt;=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);                             
   }
}

【讨论】:

  • 谢谢,但我忘了提到 -font 中的值:它们可以改变
  • 我将使用新的正则表达式模式更新答案,谢谢!
  • @AderbalFarias 请检查新的正则表达式模式并告诉我是否有问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多