正则表达式匹配结束报价后跟字母

时间:2015-03-27 22:27:57

标签: regex quotes

我正在编写一个文本格式化例程,它将在适用的地方插入空格,我正在努力构建一个正则表达式,它将匹配结束引号(双或单个)符号后跟一个字母。例如:

first " closing double quote" should not match, but "the second one"should.

此处应仅在第二个结束报价后插入空格。到目前为止我已经

(["']).*?\1(?![^\p{L}])

打算使用一个命名组作为反向引用部分并从那里注入我的空间,但这匹配整个

"closing double quote" should not match, but " 

而不是

"the second one"

我在这里应用什么魔法?如果这有任何不同,我正在使用.Net 4.5。

更新:玩过一些测试数据后,我意识到将单引号与撇号区分开来是不可能的,所以问题现在应该是“双引号”而不是“单引号或双引号”

4 个答案:

答案 0 :(得分:1)

这看起来很艰难。你去吧,

(["'])(?:(?!\1).)*\1(?=\p{L}(?:\1(?:(?!\1).)*+\1|[^'"])*$)

使用上述正则表达式,然后将匹配的字符替换为$0<space>

DEMO

  • (["'])(?:(?!\1).)*\1仅匹配单引号或双引号字符串,

  • \p{L}任何语言的任何来信。

  • (?:\1(?:(?!\1).)*+\1|[^'"])*双引号字符串(&#34; foo&#34;)或单引号字符串(&#39; foo&#39;)或不是双引号或单引号(f,o, o),零次或多次。

  • $行锚的结束。

答案 1 :(得分:1)

使用此模式,它适用于单引号和双引号引号,后面没有相同字符串中的空格

"(?!\s)(?=(?:(?:[^"]*"){2})*[^"]*$)|'(?!\s)(?=(?:(?:[^']*'){2})*[^']*$)

Demo

答案 2 :(得分:0)

如果您的输入中没有任何异常间距,此建议将起作用。您可以在带引号的字符串周围添加空格(支持单引号和双引号:

  var result = Regex.Replace(str, @"(\s*)((['""])(?!\3).+?\3)\s*", " $2 ");

在Expresso中测试:

Input:
 - First "closing double quote" should not match, but "the second one"should. 
 - First 'closing double quote' should 'the "second" one'should.

Output:
 - First "closing double quote" should not match, but "the second one" should. 
 - First 'closing double quote' should 'the "second" one' should.

答案 3 :(得分:0)

如果你想保持简单,我会使用这样的东西:

".*?"(.)

然后,您可以简单地检查捕获组1并查看它是否是空格。

您可以重复

'.*?'(.)

如果你想对单引号做同样的事情。

示例:

https://www.debuggex.com/r/5Ibzv2UbhcZXxW9n