繁体   English   中英

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

[英]C# Regex - Match certain char followed by number/identifier

我遇到了一个似乎从未在这里被问过的正则Regex 我必须替换 char a后跟一个whitespace (或不跟随),但必须后跟一个number (不能替换该数字)。

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

1]

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

我只想匹配数字8 (或任何其他数字,或像N574A类的标识符)之前的a并将该 char 替换为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'art8或 agricoltura agricoltura 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模式似乎替换了正确的值, 这里是演示

您可以使用

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

替换为$1rt$2 查看正则表达式演示

细节

  • \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 - 单词边界。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM