C#正则表达式-匹配某些字符,后跟数字/标识符 更新

我遇到Regex的问题,这里似乎从未有人问过。 我必须将字符a替换为whitespace(或不跟随),但必须替换为number(不得替换数字)。

我有这个正则表达式: [aA]\s.(?<=\d)* 结果就是这样:

C#正则表达式-匹配某些字符,后跟数字/标识符
      
    更新

我使用(?<=\d)*尝试匹配但不从空格后跟(或不跟)字符后立即捕获数字,但是显然它不起作用,也是因为“ \ d”不包括标识符。 标识符可以是一系列数字或字母数字字符,没有定义的长度,也可以是字母排序(如果是字母数字)。 它们可以是A54N3Z4G7884544AZ77A11A。组合总是在变化。

我只想在数字a(或任何其他数字,或类似8的标识符)前匹配N574A,并用art替换该字符,但保留数字/ identifier的原样,因此结果应为:agricoltura n 6 sensi dell'art8agricoltura n 6 sensi dell'artN574A,并且如果目标字符串是agricoltura n 6 sensi dell'a8agricoltura n 6 sensi dell'aN574A,(因此不带空格) )的结果应为:agricoltura n 6 sensi dell'art8agricoltura n 6 sensi dell'artN574A

因此通用规则应为: Match [aA] followed by an optional space then must be followed by a number or an identifier that must not be captured

有可能这样做吗?有什么解决方案? 非常感谢!

更新

使用\\b([aA])\\s*([A-Za-z]*\\d[\\dA-Za-z]*)\\b模式似乎可以替换正确的值,here是演示

love990311 回答:C#正则表达式-匹配某些字符,后跟数字/标识符 更新

您可以使用

\b([aA])\s*([A-Za-z]*\d[\dA-Za-z]*)\b

替换为$1rt$2。参见regex demo

详细信息

  • \b-单词边界
  • ([aA])-第1组(在替换模式中称为$1):aA
  • \s*-0个或多个空格
  • ([A-Za-z]*\d[\dA-Za-z]*)-第2组(替换模式中用$2指代):一个包含至少一位数字的字母数字完整单词:
    • [A-Za-z]*-零个或多个ASCII字母
    • \d-一个数字
    • [\dA-Za-z]*-0+个数字或ASCII字母(将\d替换为0-9以仅匹配ASCII数字,或将RegexOptions.ECMAScript标志传递给Regex构造函数)
  • \b-单词边界。
本文链接:https://www.f2er.com/3152957.html

大家都在问