我正在设置一个系统来解析具有非常指定语法的字符串并修复用户错误。例如,语法需要m/d/yy格式的日期(没有前导的0),因此我需要进行以下替换:
我有很多这样的规则,根据这些规则,我需要找到字符串的部分并修复这些部分。我可以使用RegEx来识别哪些东西需要很容易地纠正。举个简单的例子,我想要找到CBUx[2-9]
,但是我需要用类似于CBU x [2-9]
的东西来替换(如果x周围的空格前面是CBU,则用一个数字折叠)。示例:
输入文本:"blah blah CBUx3“匹配:"CBUx3”替换:"CBU x 3“输出文本:"blah blah CBU x3”
这个是可能的吗?请注意,我完全知道我可以编写代码来查找斜杠和数字。我特别想用一个“智能RegEx替换”来完成这个任务。我有许多不同类型的更正,我可以与RegEx相匹配,我想避免编写具体的更正过程为每个。
发布于 2013-10-10 18:22:38
也许对前导零来说是这样的:
\b0+([1-9])
并以$1
(或\1
)代替(这取决于语言,尽管\1
现在已经不常见了)。
但是,更好的方法可能是使用负面的外观:
(?<![.,])\b0+([1-9])
这样,10,001.002
中的10,001.002
就不会更改为10,1.2
。
regex101演示
单词边界\b
确保0
(或更多)位于数字的开头,而负查找是针对小数和1000个分隔符的情况,假设字符串中有浮点数。但是,请注意,这将防止以11.01.13
的日期格式移除零。然而,更复杂的正则表达式可以假设这样的日期总是在第二个点之后至少有一个数字(因为日期和月份最多需要2位数),而不会遇到其他数字,这使得正则表达式看起来就像.
(?<)\b0+([1-9])
它呈现为类似于这的东西。
对于CBUx[2-9]
,也可以使用捕获组:
CBUx([2-9])
将其替换为:CBU x $1
(或\1
)
可能有一些调整,我没有考虑到领先的零去除部分,但这是我现在可以考虑的。
https://stackoverflow.com/questions/19283674
复制相似问题