我有一个遵循一些规则的表达式:
''%内部 可以有零个或多个''''表达:
(?i)^(?<q>['])[%\p{Zs}\p{L}\p{N}|()]*\k<q>$
Run Code Online (Sandbox Code Playgroud)
现在我需要另一个表达式来替换所有)和(例如,在"TEST"的字符串中,但仅当它们没有被''包围时.诀窍是当时)或(被''包围但是这些字符属于一对不同的'',它不应该通过.
结果示例:
'(' > pass
' ( ' > pass
')' > pass
' ) ' > pass
' content here ' ' )' > pass
' content here' ) ' another content' > does not pass
Run Code Online (Sandbox Code Playgroud)
请注意,第一个内容有'',第二个内容也有.任何)或(如果它介于它们之间,则不应通过).
我不是正则表达式的专业人士,所以如果你不知道它是怎么回事,任何相关的文档或教程都会有很大的帮助.
您可以使用正则表达式:
^.*[()](?=[^']*'(?>(?:[^']*'[^']*){2})*$)
Run Code Online (Sandbox Code Playgroud)
请参阅演示。
代码:
var rgxHardNut = new Regex(@"^.*[()](?=[^']*'(?>(?:[^']*'[^']*){2})*$)");
var check1 = rgxHardNut.IsMatch("'('"); // true
var check2 = rgxHardNut.IsMatch("' ( '");// true
var check3 = rgxHardNut.IsMatch("')'"); // true
var check4 = rgxHardNut.IsMatch("' ) '");// true
var check5 = rgxHardNut.IsMatch("' content here ' ' )'"); // true
var check6 = rgxHardNut.IsMatch("' content here' ) ' another content'"); // false
Run Code Online (Sandbox Code Playgroud)