如果源字符串不以相同的子字符串开头,则前置子字符串

Clo*_*ner 1 .net c# regex vb.net replace

我正在尝试创建一个有效的RegEx替换模式,以正确格式化特定的.XML文件名.具体来说,如果文件名不以前缀开头,那么就说ACE_.如果XML文件名和扩展名不以ACE_开头,则将字符串ACE_添加到文件名中.例如,如果我的输入源字符串如下:

Widgets.xml

我想执行一个RegEx Replacement,导致字符串为:

ACE_Widgets.xml.

相反,如果字符串已经以ACE_开头,我希望它保持不变.

另外,如何包含模式".xml"以确保文件名和扩展名的字符串模式以".xml"结尾,并且RegEx替换模式的匹配模式相同?

至于比赛,我有以下运气:

^ACE_{1}[\d\D]+
Run Code Online (Sandbox Code Playgroud)

如果输入字符串是ACE_Widgets.xml,则表示模式匹配,如果字符串是Widgets.xml则不匹配

RegEx模式就足够了,但是如果您需要知道我想要使用的语言,那么替换模式是在.NET 4.0中的C#或VB.NET中.

以下帖子接近我正在寻找的内容,但是包含了*ix目录路径前缀,并且在PHP中使用了preg_replace(),我在使用它时遇到了一些困难我需要去做:

正则表达式:如何替换不以某些东西开头的字符串?

一如既往,感谢您的时间,帮助和耐心.他们非常感谢...

rid*_*ner 6

实际上正则表达式是一种非常干净的方法来实现这一目标.这是一个带有正则表达式的解决方案,它以自由间隔模式编写,带有很多注释:

text = Regex.Replace(text, @"
    # Match XML file names not starting with: ACE_
    ^          # Anchor to start of string.
    (?!ACE_)   # Assert does not start with ACE_
    .*         # Match filename up to extension.
    (?i)       # Make case insensitive for .xml
    \.xml      # Require XML file extension.
    $          # Anchor to end of string.", 
    "ACE_$0", RegexOptions.IgnorePatternWhitespace);
Run Code Online (Sandbox Code Playgroud)

请注意,这假定ACE_前缀要求区分大小写.

  • +1用于解释正则表达式逐步执行的操作 (2认同)