【问题标题】:C# Regular Expression which excludes characters inside QuotesC#正则表达式排除引号内的字符
【发布时间】:2014-02-27 16:01:11
【问题描述】:

我正在尝试使用正则表达式将一行拆分为一个键/值对。谁能给我提示如何正确拆分下面的行?

这条线看起来像这样:

"key"="some=value"

我想把它分成:

key  
some=value

我必须读取一个字符串资源文件,它看起来像这样:

"key1"="translation number one";  
"key2"="translation number = the second number";   

当我做一个

string[] elements = Regex.Slit(line, "=");  

我得到了 3 个元素,而不是我想要的 2 个。所以基本上我想在引号外的“=”处拆分

【问题讨论】:

  • 你能分享你的代码吗?你到底在哪里卡住了?
  • mystring.Split('\"'); 返回string[],元素 1 和 3 包含您想要的值。这里不需要正则表达式。
  • 总是在同一行中,键总是为空并且 = " ?
  • 我要读取一个字符串资源文件,如下所示:code"key1"="translation number 1"; "key2"="翻译数字=第二个数字";当我执行 Regex.Slit(line, "=") 时,我得到 3 个元素,而不是我想要的两个。所以基本上我想在引号外的“=”处拆分

标签: c# regex string split


【解决方案1】:

首先去除两端的引号(")字符串。然后使用正则表达式拆分字符串:

string []splits = Regex.Split(input.Trim('"'), "\\s*\"\\s*=\\s*\"\\s*");

【讨论】:

  • 如果您的数据已转义引号怎么办?为什么不直接使用 C# 中内置的反序列化方法?
【解决方案2】:

假设每行单个键=值

^"(?<key>[^"]+)"="(?<value>.*)"$

【讨论】:

  • 如果字符串包含引号怎么办?
  • @SimonBelanger 我相信默认情况下这是贪婪的,但以防万一,我们可以让它具体......
  • 我在发表评论后意识到可能是这种情况,尤其是^ 和$。显式处理引号的转义字符就像(?&lt;value&gt;([^"]|\\")+) 一样简单。
猜你喜欢
  • 2010-11-16
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2013-01-13
相关资源
最近更新 更多