【问题标题】:Trimming whitespaces in regex在正则表达式中修剪空格
【发布时间】:2026-01-31 05:45:01
【问题描述】:

我有一个用于解析由等号分隔的键/值对的正则表达式。 '=' 前后可以有一些空格字符,但键和值应该没有它们。例如

key=value
key = value

必须返回相同的结果:“key”和“value”,而不是“key”和“value”。

解析值有点问题,因为可以为空也可以。

key=

这是我的正则表达式版本,没有修剪值 https://regex101.com/r/pY9rW8/2 的空格

【问题讨论】:

  • 你为什么不直接使用string.Trim()
  • 我很懒。 string.Replace(" = ","="); :D

标签: c# regex


【解决方案1】:

你给了这个正则表达式:

^\s*([^#]\S+?)\s*=(.*)

这不会考虑= 之后的空格。为此,请添加另一个\s*

^\s*([^#]\S+?)\s*=\s*(.*)

另外,大概你想匹配字符串的结尾,因为你通过^匹配开头,所以在结尾添加一个$

^\s*([^#]\S+?)\s*=\s*(.*)$

这是一个活生生的例子:

https://regex101.com/r/pY9rW8/6

【讨论】:

  • 当值为空时,您的示例无法正常工作。它将下一个字符串视为一个值
【解决方案2】:

您也可以在键和值上使用命名组并丢弃空格:

^(?<key>.+)\s*=\s*(?<value>.+)$

【讨论】:

  • 它不适用于空值,但无论如何谢谢。
【解决方案3】:

你可以考虑一个没有正则表达式的变体:

string s = "key=value";
var a = s.Split('=');
var key = a[0].Trim();
var val = a[1].Trim();

【讨论】:

  • 当然,如果没有价值,则需要进行额外的检查。但是,固溶体。
  • 不错的解决方案,但目标是使用正则表达式来实现
【解决方案4】:

只需将值部分中的空格与[\t ]*匹配

^\s*([^#]\S+?)\s*=[\t ]*(.*)

^\s*([^#]\S+?)\s*=[\t ]*(.*?)\s*$

DEMO

【讨论】: