C#:带有单引号的字符串的正则表达式(并通过双引号进行转义)

C#:带有单引号的字符串的正则表达式(并通过双引号进行转义),c#,regex,string,escaping,C#,Regex,String,Escaping,我没有找到解决我问题的正则表达式。总是有使用反斜杠转义的示例正则表达式 但我需要通过将封闭字符加倍来进行转义 例如:“o”“reilly” 结果:o'reilly '(?:''|[^']*)*' 将匹配可能包含双转义引号的以引号分隔的字符串。这就是你的正则表达式来找到那些字符串 说明: ' # Match a single quote. (?: # Either match... (use (?> instead of (?: if you can) '' # a

我没有找到解决我问题的正则表达式。总是有使用反斜杠转义的示例正则表达式

但我需要通过将封闭字符加倍来进行转义

例如:“o”“reilly”

结果:o'reilly

'(?:''|[^']*)*'
将匹配可能包含双转义引号的以引号分隔的字符串。这就是你的正则表达式来找到那些字符串

说明:

'      # Match a single quote.
(?:    # Either match... (use (?> instead of (?: if you can)
 ''    # a doubled quote
|      # or
[^']*  # anything that's not a quote
)*     # any number of times.
'      # Match a single quote.
(?<!') # Assert that the previous character (if present) isn't a quote
'      # Match a quote
(?!')  # Assert that the next character (if present) isn't a quote
现在要正确删除引号,可以分两步进行:

首先,搜索
(?)?

第二,搜索
'
并用
'

替换所有的正则表达式。您使用的是什么类型的正则表达式?Perl?R?Python?Emacs?您使用的是哪个正则表达式引擎?我使用C中的正则表达式类吗?我需要:“)*”任意次数。“如果外部的“+”处理重复?顺便说一句:如果使用了外部“+”,是否可以使用空字符串?@user437899:我在简明版的正则表达式中输入了一个拼写错误;在这两种情况下都应该是
)*
(尽管
)+
仍然允许使用空字符串)。好的。非常感谢。为什么我应该使用(?>而不是(?:?@user437899:嵌套的量词有风险。使用原子组(只要您的正则表达式引擎支持)是可以避免的。另一种解决方案是使用所有格量词(
*+
而不是
*
),如果您的正则表达式引擎支持这些。再次感谢您的解释。我现在使用带命名组的“(?(?:”|[^']*)*)*)”来获取不带引号的字符串。