正则表达式查找数字和单词之间缺少 space 的位置
Regex to find where space is missing between number and word
我正在使用正则表达式来清理一些文本文件。
在某些地方,缺少 spaces,如下面的第二行所示:
1.9 Beef Curry
1.10Banana Pie
1.11 Corn Gravy
我需要一个表达式来在 0 和 B 之间的位置找到一个零长度的匹配项,这样我就可以用 space 替换它(在 Notepad++ 中)。注意分子可以是一位或两位,也可以是一级(即1. Exotic Disches)或三级(即2.5.1 Chicken)
有人能给个答案吗?
我原以为以下其中一项应该有效,但 Notepad++ 认为它无效。如果有人能告诉我为什么,也将不胜感激...
(?<=\.\d\d|\.\d)(?! )(?!\.)
(?<=\.\d{1,3)(?! )(?!\.)
提前致谢!
您可以使用其中之一
^\d[\d.]*+(?!\h)
^\d[\d.]*+(?! )
^(?>\d+(?:\.\d+)*\.?)(?!\h)
替换为$&
。
设置和测试:
详情
^\d[\d.]*+(?!\h)
匹配一个数字,然后匹配 0 个或多个 digits/dots,一旦它们全部匹配,将检查水平白色 space。如果没有白色space,就有匹配
^\d[\d.]*+(?! )
是一样的,只是对常规 space. 执行检查
^(?>\d+(?:\.\d+)*\.?)(?!\h)
更具体,匹配
^
- 行首
(?>\d+(?:\.\d+)*\.?)
- 防止回溯的原子组:
\d+
- 1+ 位数
(?:\.\d+)*
- 0 个或多个 .
和 1+ 个数字 的序列
\.?
- 一个可选的点
(?!\h)
- 不允许紧靠右侧的水平白色space
也许这就足够了,只需查找零长度 spaces \B
(非 word boundaries) between word characters 并检查是否前面有数字但后面没有数字。如果是这样,请替换为 space.
\B(?<=\d)(?!\d)
- 在任意
\B
非单词边界
(?<=\d)
looks 落后一个数字
(?!\d)
向前看没有数字
要进一步将数字部分限制为 点,然后是 1-3 位数字,请尝试 \.\d{1,3}\B\K(?!\d)
where \K
resets beginning of the reported match. Or without \K
and replace by [=18=]
顺便提一句:下划线也属于单词字符。如果您的输入包含下划线,例如类似于 1_
并且您不想在此处添加 space,请将前瞻更改为 (?![\d_])
我的替代尝试也有效
查找内容:^(\d\.\d+) ?(?=\w)
替换为:
space
在
之后
我正在使用正则表达式来清理一些文本文件。 在某些地方,缺少 spaces,如下面的第二行所示:
1.9 Beef Curry
1.10Banana Pie
1.11 Corn Gravy
我需要一个表达式来在 0 和 B 之间的位置找到一个零长度的匹配项,这样我就可以用 space 替换它(在 Notepad++ 中)。注意分子可以是一位或两位,也可以是一级(即1. Exotic Disches)或三级(即2.5.1 Chicken)
有人能给个答案吗?
我原以为以下其中一项应该有效,但 Notepad++ 认为它无效。如果有人能告诉我为什么,也将不胜感激...
(?<=\.\d\d|\.\d)(?! )(?!\.)
(?<=\.\d{1,3)(?! )(?!\.)
提前致谢!
您可以使用其中之一
^\d[\d.]*+(?!\h)
^\d[\d.]*+(?! )
^(?>\d+(?:\.\d+)*\.?)(?!\h)
替换为$&
。
设置和测试:
详情
^\d[\d.]*+(?!\h)
匹配一个数字,然后匹配 0 个或多个 digits/dots,一旦它们全部匹配,将检查水平白色 space。如果没有白色space,就有匹配^\d[\d.]*+(?! )
是一样的,只是对常规 space. 执行检查
^(?>\d+(?:\.\d+)*\.?)(?!\h)
更具体,匹配^
- 行首(?>\d+(?:\.\d+)*\.?)
- 防止回溯的原子组:\d+
- 1+ 位数(?:\.\d+)*
- 0 个或多个.
和 1+ 个数字 的序列
\.?
- 一个可选的点(?!\h)
- 不允许紧靠右侧的水平白色space
也许这就足够了,只需查找零长度 spaces \B
(非 word boundaries) between word characters 并检查是否前面有数字但后面没有数字。如果是这样,请替换为 space.
\B(?<=\d)(?!\d)
- 在任意
\B
非单词边界 (?<=\d)
looks 落后一个数字(?!\d)
向前看没有数字
要进一步将数字部分限制为 点,然后是 1-3 位数字,请尝试 \.\d{1,3}\B\K(?!\d)
where \K
resets beginning of the reported match. Or without \K
and replace by [=18=]
顺便提一句:下划线也属于单词字符。如果您的输入包含下划线,例如类似于 1_
并且您不想在此处添加 space,请将前瞻更改为 (?![\d_])
我的替代尝试也有效
查找内容:^(\d\.\d+) ?(?=\w)
替换为:
space
在