c# 正则表达式引号
Posted
技术标签:
【中文标题】c# 正则表达式引号【英文标题】:c# Regex quotes 【发布时间】:2021-09-02 02:09:03 【问题描述】:如何解析字符串"\"bcd ef\" a 'x y'"
,并使用正则表达式捕获引号"
,'
和没有它们之间的所有文本?我尝试了模式"(\\\"|')(.*?)(\\\"|')
,但只得到了"bcd ef"
、'x y'
。结果应该是:
"bcd ef"
a
'x y'
string pattern ="(\\\"|')(.*?)(\\\"|')";
Regex regex = new Regex(pattern);
【问题讨论】:
您的结果和描述不匹配,因为a
不是 between quotes
。
更正了主题。我需要全部解析。
那么简单地“拆分字符串”怎么样?
我尝试学习正则表达式。学习解析不同的方式。正则表达式不适合解析吗?
了解正则表达式是一件好事且必要的事情。但最重要的教训是:只有在真正需要时才使用它,没有其他解决方案可行。因为正则表达式难以理解、难以维护,而且如果做错了,可能会成为绝对的性能杀手。为了更好地理解它们,顺便推荐一下regex101.com
【参考方案1】:
两个选项是 string.Split() 或 Regex.Split()。 string.Split() 更快,但 Regex.Split() 更强大。
string.Split()
版本:
var parts = input.Split(new []'"', '\'')
.Where(p => !string.IsNullOrEmpty(p))
.Select(p => p.Trim())
.ToList();
Regex.Split()
版本:
var input = "\"bcd ef\" a 'x y'";
var parts = Regex.Split(input, "[\"']")
.Where(p => !string.IsNullOrEmpty(p))
.Select(p => p.Trim())
.ToList();
只要你想按单个字符分割,正则表达式版本就更慢了。所以没有理由使用它。
文档:
https://docs.microsoft.com/en-us/dotnet/api/system.text.regularexpressions.regex.split https://docs.microsoft.com/en-us/dotnet/api/system.string.split【讨论】:
以上是关于c# 正则表达式引号的主要内容,如果未能解决你的问题,请参考以下文章