首页 > 解决方案 > 正则表达式查找数字和单词之间缺少空格的位置

问题描述

我正在使用正则表达式来清理一些文本文件。在某些地方,缺少空格,如下面的第二行所示:

1.9 Beef Curry
1.10Banana Pie
1.11 Corn Gravy

我需要一个表达式来在 0 和 B 之间的位置找到零长度匹配,以便我可以用空格替换它(在 Notepad++ 中)。请注意,分子可以是一位或两位数,也可以是一位(即 1. Exotic Disches)或三个级别(即 2.5.1 Chicken)。

有人可以给出答案吗?

我原以为以下其中一项应该可以工作,但 Notepad++ 称它无效。如果有人能告诉我原因,我也将不胜感激...

(?<=\.\d\d|\.\d)(?! )(?!\.)
(?<=\.\d{1,3)(?! )(?!\.)

提前致谢!

标签: regexregex-lookarounds

解决方案


也许它就足够了,只需在单词字符之间寻找零长度空格\B(非单词边界)并检查,如果前面是数字而不是数字。如果是这样,请用空格替换。

\B(?<=\d)(?!\d)

在 regex101 看到这个演示

  • 在任何\B 非单词边界
  • (?<=\d) 在后面寻找一个数字
  • (?!\d)向前看没有数字

要进一步将数字部分限制为点,后跟 1-3 个数字,请尝试类似\.\d{1,3}\B\K(?!\d)where\K重置报告匹配的开头。或者没有\K并替换为$0

顺便提一下:下划线也属于单词字符。如果您的输入包含下划线,例如1_,您不想在此处添加空格,请将前瞻更改为(?![\d_])


推荐阅读