首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式.Net

正则表达式.Net
EN

Stack Overflow用户
提问于 2021-03-26 01:08:13
回答 2查看 49关注 0票数 1

有一种情况是,如果字母"O“出现在字符串的前4个字符中,我希望正则表达式将其更改为数字"0”。

示例:应将BO1A6987更改为B01A6987

我成功地使用了O(?<=^.{0,4}),但我现在需要在表达式中加入一个新元素,我不清楚如何做到这一点。

我需要忽略任何字符串,其中前4个字符是SPOC,但5-8个字符应该有任何字母"O“替代数字"0”。

示例:应将SPOCBO1A6987更改为SPOCB01A6987

EN

回答 2

Stack Overflow用户

发布于 2021-03-26 01:19:31

也许你可以试试:

代码语言:javascript
复制
^((?:SPOC)?.{0,3})O

并替换为${1}0。查看在线demo

  • ^ -开始行anchor.
  • ( -打开第一个捕获组:
    • (: -打开非捕获组:
      • SPOC -匹配"SPOC“literally.
      • )? -关闭非捕获组并将其设置为optional.

代码语言:javascript
复制
- `.{1,3}` - Capture 0-3 characters other than newline.
- `)` - Close 1st capture group.

  • O -捕获大写“O”。

替换是通过对我们的第一个捕获组的反向引用来完成的,但您不能简单地使用$1,因为我们需要在它后面跟一个零,引擎可能会认为您引用的是第10个捕获组。因此,使用花括号将反向引用括起来。

您还可以参考this .Net演示。

编辑:

上面的代码只处理一个实例。我猜,如果你想替换第一到第四个位置或第五到第八个位置中的所有实例,你可以尝试:

代码语言:javascript
复制
(?<=^(?:SPOC)?.{0,3})(?<!^SP(?=OC))O

其中:

  • (?<= -打开正向回溯:
    • ^ -开始行anchor.
    • (?:SPOC)? -可选捕获"SPOC".
    • .{0,3} - 0-3个字符,而不是newline.
    • ) -关闭正向lookbehind.

  • (?<! -打开负向后视:
    • ^ -开始行anchor.
    • SP -匹配"SP“literally.
    • (?= -打开正向前视:
      • OC -匹配"OC”literally.
      • ) -关闭正向lookahead.

代码语言:javascript
复制
- `)` - Close negative lookahead.

  • O -捕获大写“O”。

现在只需将其替换为零。请参阅.Net demo

票数 2
EN

Stack Overflow用户

发布于 2021-03-26 05:20:23

使用后视的另一种选择可能是:

向左声明字符串的开头,后面不跟SPOC,匹配任意字符0-3次,或者向左声明字符串的开头,后面跟着SPOC,匹配任意字符0-3次。

在断言匹配O之后

代码语言:javascript
复制
(?<=^(?!SPOC).{0,3}|^SPOC.{0,3})O

模式匹配:

  • (?<=正向查找字符串的开头,直接向右声明
    • ^(?!SPOC).{0,3} times
    • | OR
    • ^SPOC.{0,3},并匹配字符串的任意字符0-3 times

开头和字符串的任意字符0-3字符

  • ) Close lookbehind
  • O Match字面意思是

Regex demo

如果要替换前8个字符中的所有O,可以将限定符更改为{0,7}

代码语言:javascript
复制
(?<=^(?!SPOC).{0,7}|^SPOC.{0,3})O

Regex demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66804349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档