我遇到Regex
的问题,这里似乎从未有人问过。
我必须将字符a
替换为whitespace
(或不跟随),但必须替换为number
(不得替换数字)。
我有这个正则表达式:
[aA]\s.(?<=\d)*
结果就是这样:
我使用(?<=\d)*
尝试匹配但不从空格后跟(或不跟)字符后立即捕获数字,但是显然它不起作用,也是因为“ \ d”不包括标识符。
标识符可以是一系列数字或字母数字字符,没有定义的长度,也可以是字母排序(如果是字母数字)。
它们可以是A54N3
,Z4G78
或8454
或4AZ7
或7
或A1
,1A
。组合总是在变化。
我只想在数字a
(或任何其他数字,或类似8
的标识符)前匹配N574A
,并用art
替换该字符,但保留数字/ identifier的原样,因此结果应为:agricoltura n 6 sensi dell'art8
或agricoltura n 6 sensi dell'artN574A
,并且如果目标字符串是agricoltura n 6 sensi dell'a8
或agricoltura n 6 sensi dell'aN574A
,(因此不带空格) )的结果应为:agricoltura n 6 sensi dell'art8
或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
模式似乎可以替换正确的值,here是演示
答案 0 :(得分:1)
您可以使用
\b([aA])\s*([A-Za-z]*\d[\dA-Za-z]*)\b
替换为$1rt$2
。参见regex demo
详细信息
\b
-单词边界([aA])
-第1组(在替换模式中称为$1
):a
或A
\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
-单词边界。