C#:带有单引号的字符串的正则表达式(并通过双引号进行转义)
我没有找到解决我问题的正则表达式。总是有使用反斜杠转义的示例正则表达式 但我需要通过将封闭字符加倍来进行转义 例如:“o”“reilly” 结果:o'reillyC#:带有单引号的字符串的正则表达式(并通过双引号进行转义),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
'(?:''|[^']*)*'
将匹配可能包含双转义引号的以引号分隔的字符串。这就是你的正则表达式来找到那些字符串
说明:
' # 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:嵌套的量词有风险。使用原子组(只要您的正则表达式引擎支持)是可以避免的。另一种解决方案是使用所有格量词(*+
而不是*
),如果您的正则表达式引擎支持这些。再次感谢您的解释。我现在使用带命名组的“(?(?:”|[^']*)*)*)”来获取不带引号的字符串。