如果Match在String的开头,那么...... in。" Regex"条件

时间:2015-07-06 17:59:27

标签: .net regex conditional

))大家好,我想创建一个这种语法的regEx条件(?(正则表达式)然后| else)请一个正则表达式。 这是我的字符串......

cook, eat, write, play

目前正在使用此正则表达式

(, )?write

...并将其替换为"" (没什么,只是删除它)

为了删除"写字"和#34;逗号和空格"可能会或可能不会出现在它之前。所以申请后我得到这个字符串...

cook, eat, play

但如果我想删除第一个单词" cook"在使用相同正则表达式(, )?cook的字符串中,我会得到这个尴尬的结果......

, eat, write, play

所以,我想创建一个可以检查的正则表达式条件... 如果在字符串的开头找到匹配,则删除之前的匹配,但也删除以下"逗号和空格"所以它给出了结果......

eat, write, play

如何创建条件?或者是其他更好的正则表达式吗? 请注意我使用的宏自动化工具只允许我使用正则表达式替换文本,我不能用任何可以取代正则表达式的语言进行编程。请我只需要一个Regex解决方案,我只使用这个.NET Regex测试器。 http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

谢谢高级。

1 个答案:

答案 0 :(得分:1)

我希望它更复杂,但如果你必须有条件,
它(表达):@"(?(^)write,[ ]|,[ ]write)"

 (?( ^ )              # Conditional, is at BOS ? 
      write, [ ]          # Yes, this form
   |                     # else
      , [ ] write          # No, this form
 )                    # end conditional.

但是,如果没有条件:@"^write,[ ]|,[ ]write"

,也可以实现同样的效果
   ^ write , [ ]
|  
   , [ ] write

但是,使用条件可能会更复杂。 @"(?>(^)?)(?:,[ ])?write(?(1),[ ])"

 (?>( ^ )?)           # (1), Optional BOS, with atomic group
 (?: , [ ] )?         # Optional comma space for all 
 write                # 'write'
 (?(1) , [ ] )        # Conditional, if group 1 matched, 
                      # then match the space comma after
                      # otherwise, don't match anything else.