首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >智能RegEx替换

智能RegEx替换
EN

Stack Overflow用户
提问于 2013-10-09 22:06:37
回答 1查看 192关注 0票数 0

我正在设置一个系统来解析具有非常指定语法的字符串并修复用户错误。例如,语法需要m/d/yy格式的日期(没有前导的0),因此我需要进行以下替换:

  • 10/01/13 -> 10/1/13
  • 10/10/13 ->无变化
  • 10/1/13 ->无变化
  • 01/10/13 -> 1/10/13

我有很多这样的规则,根据这些规则,我需要找到字符串的部分并修复这些部分。我可以使用RegEx来识别哪些东西需要很容易地纠正。举个简单的例子,我想要找到CBUx[2-9],但是我需要用类似于CBU x [2-9]的东西来替换(如果x周围的空格前面是CBU,则用一个数字折叠)。示例:

输入文本:"blah blah CBUx3“匹配:"CBUx3”替换:"CBU x 3“输出文本:"blah blah CBU x3”

这个是可能的吗?请注意,我完全知道我可以编写代码来查找斜杠和数字。我特别想用一个“智能RegEx替换”来完成这个任务。我有许多不同类型的更正,我可以与RegEx相匹配,我想避免编写具体的更正过程为每个。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 18:22:38

也许对前导零来说是这样的:

代码语言:javascript
运行
复制
\b0+([1-9])

并以$1 (或\1 )代替(这取决于语言,尽管\1现在已经不常见了)。

但是,更好的方法可能是使用负面的外观:

代码语言:javascript
运行
复制
(?<![.,])\b0+([1-9])

这样,10,001.002中的10,001.002就不会更改为10,1.2

regex101演示

单词边界\b确保0 (或更多)位于数字的开头,而负查找是针对小数和1000个分隔符的情况,假设字符串中有浮点数。但是,请注意,这将防止以11.01.13的日期格式移除零。然而,更复杂的正则表达式可以假设这样的日期总是在第二个点之后至少有一个数字(因为日期和月份最多需要2位数),而不会遇到其他数字,这使得正则表达式看起来就像.

代码语言:javascript
运行
复制
(?<![.,](?![0-9]{2}\.[0-9]))\b0+([1-9])

它呈现为类似于的东西。

对于CBUx[2-9],也可以使用捕获组:

代码语言:javascript
运行
复制
CBUx([2-9])

将其替换为:CBU x $1 (或\1)

可能有一些调整,我没有考虑到领先的零去除部分,但这是我现在可以考虑的。

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

https://stackoverflow.com/questions/19283674

复制
相关文章

相似问题

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