繁体   English   中英

查找包含在不同类型双引号中的字符串

[英]Find strings enclosed within different types of double quotes

我正在编写一个正则表达式来提取包含在不同类型的双引号( " )中的字符串。

到目前为止,我已经编写了下面的代码,它按预期工作,但正则表达式很大,我认为它可以改进。

//mergeField = {{field(“dd/MMM/yyyy")}}
var startIndex = mergeField.IndexOf('(');
var endIndex = mergeField.IndexOf(')');
string format = mergeField.Substring(startIndex: startIndex + 1, length: endIndex - startIndex - 1);

string formatSpecifierPattern = string.Format(@"{0}|{1}|{2}|{3}|{4}|{5}", @"(\“.*?\”)|(\”.*?\”)", "\\\"(.*?)\\\"", "“(.*?)\\\"", "\\\"(.*?)“", "”(.*?)\\\"", "\\\"(.*?)”");
MatchCollection matches = Regex.Matches(format, formatSpecifierPattern);

在上面的代码中,mergeField 作为参数传递,它可以有不同的引号组合。 有什么办法可以简化我的正则表达式并处理所有组合( "

输入 - 预期 Output

{{field(“dd/MMM/yyyy")}} -> “dd/MMM/yyyy"
{{field("dd/MMM/yyyy“)}} -> "dd/MMM/yyyy“
{{field("dd/MMM/yyyy")}} -> "dd/MMM/yyyy"
{{field(“dd/MMM/yyyy“)}} -> “dd/MMM/yyyy“
{{field(“dd/MMM/yyyy“)}} -> “dd/MMM/yyyy“
{{field(”dd/MMM/yyyy")}} -> ”dd/MMM/yyyy"
{{field("dd/MMM/yyyy”)}} -> "dd/MMM/yyyy”
{{field(”dd/MMM/yyyy”)}} -> ”dd/MMM/yyyy”

如果您只关心<one kind of quote> <some text> <one kind of quote>而引用的类型并不重要,那么您需要做的就是:

["“”](.*?)["“”]

在线尝试

解释:

  • ["“”] : 这些字符之一
  • (.*?) :尽可能多的任何字符,但惰性匹配
  • ["“”] : 这些字符之一

如果<some text>具有您知道的格式,您还可以指定它以防止捕获包含在引号中的其他一些文本(如果可能的话)

例如: ["“”]\d{1,2}/\w{3}/\d{4}["“”]将匹配"08/Feb/2021" ,但不匹配"dd/MMM/yyyy""abcdefgh"在线试用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM