那个正则表达式怎么样?

Th3*_*B0Y 8 c# regex

我有一个遵循一些规则的表达式:

  • 角色'必须是第一个和最后一个角色
  • 里面可以有零个或多个空格 ''
  • %内部 可以有零个或多个''
  • 里面可以有零个或多个单词(字母和数字) ''

表达:

(?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)

请注意,第一个内容有'',第二个内容也有.任何)或(如果它介于它们之间,则不应通过).

我不是正则表达式的专业人士,所以如果你不知道它是怎么回事,任何相关的文档或教程都会有很大的帮助.

Wik*_*żew 3

您可以使用正则表达式:

^.*[()](?=[^']*'(?>(?:[^']*'[^']*){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)