c# - 如果源字符串不以相同的子字符串开头,则添加一个子字符串

标签 c# .net regex vb.net replace

我正在尝试创建一个有效的 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/

相关文章:

javascript - 使用javascript从字符串自动生成标签

c# - new() 在这种情况下意味着什么

c# - 使用linq和automapper在dto中将属性序列化为复杂类型

c# - 识别 Web 浏览器的垂直滚动到达 c# 中的最后位置

c# - XNode.DeepEquals 意外返回 false

.net - 在不重新构建的情况下更改程序集的 list

ruby - 多行/未知数据正则表达式查询

c# - 是否有示例说明为什么应在 NHibernate 中覆盖 Equals/GetHashCode?

c# - 我可以将 null 作为 HashAlgorithm.TransformBlock() 的 "output buffer"参数传递吗?

php - 在 MySQL 中存储带有通配符的 URL 并返回匹配项