0

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

  • 10/01/13 -> 10/1/13
  • 10/10/13 -> 没有变化
  • 10/1/13 -> 没有变化
  • 2013 年 1 月 10 日 -> 2013 年 1 月 10 日

我有很多这样的规则,我需要通过这些规则找到字符串的一部分并修复这些部分。我可以使用 RegEx 轻松识别需要更正的内容。举一个更简单的例子,我想找到CBUx[2-9],但是我需要用这样的东西替换CBU x [2-9](如果 x 前面有 CBU 并且后面有一个数字,则 x 周围的空格)。例子:

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

这可能吗?请注意,我完全知道我可以编写代码来查找斜杠和数字。我特别想通过“智能正则表达式替换”来做到这一点。我有很多不同类型的更正可以与 RegEx 匹配,并且我想避免为每种类型编写特定的更正程序。

4

1 回答 1

0

对于前导零,可能是这样的:

\b0+([1-9])

并替换为$1(或\1取决于语言,尽管\1现在不太常见)。

但是使用负面的后视可能会更好一些:

(?<![.,])\b0+([1-9])

这样0in10,001.002就不会更改为10,1.2.

正则表达式101演示

单词边界 ,\b确保0(或更多)位于数字的开头,而否定的后视是针对小数和千位分隔符的情况,假设字符串中有浮点数。请注意,这将阻止删除日期格式中的零11.01.13。然而,可以通过假设这样的日期在第二个点之后总是有至少一个数字(因为日期和月份最多占用 2 个数字,它本身在 2 个数字之后)而不遇到除其他数字以外的任何其他数字,从而可以制作更复杂的正则表达式,这使得正则表达式看起来像......

(?<![.,](?![0-9]{2}\.[0-9]))\b0+([1-9])

并呈现为这样的东西


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

CBUx([2-9])

并替换为:(CBU x $1\1


对于前导零移除部分,我可能没有考虑一些调整,但这就是我现在能想到的。

于 2013-10-10T18:22:38.217 回答