我正在尝试创建一个有效的 RegEx 替换模式以正确格式化特定的 .XML 文件名。具体来说,如果文件名不以前缀开头,比如 ACE_。如果 XML 文件名和扩展名不以 ACE_ 开头,请在文件名前加上字符串 ACE_。例如,如果我的输入源字符串如下:
Widgets.xml
我想执行单个 RegEx 替换,导致字符串为:
ACE_Widgets.xml.
相反,如果字符串已经以 ACE_ 开头,我希望它保持不变。
另外,我如何包含模式“.xml”以确保文件名和扩展名的字符串模式在与 RegEx 替换模式相同的匹配模式中以“.xml”结尾?
至于比赛,我有以下几点运气:
^ACE_{1}[\d\D]+
如果输入字符串是 ACE_Widgets.xml,则表示模式匹配,如果字符串是 Widgets.xml,则表示不匹配
RegEx 模式就足够了,但如果您需要知道我想使用的语言,替换模式是 .NET 4.0 中的 C# 或 VB.NET。
以下帖子与我正在寻找的内容很接近,但是由于包含 *ix 目录路径前缀以及在 PHP 中使用 preg_replace(),我很难找到它处理我需要做的事情:
Regular Expression: How to replace a string that does NOT start with something?
一如既往,提前感谢您的时间、帮助和耐心。非常感谢他们……
最佳答案
实际上,正则表达式是实现此目的的一种非常简洁的方法。这是一个正则表达式的解决方案,该正则表达式以自由间距模式编写,带有大量注释:
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);
请注意,这假设 ACE_
前缀要求区分大小写。
关于c# - 如果源字符串不以相同的子字符串开头,则添加一个子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7714829/