正则表达式 R 将标点符号与保留 "e.g." 和 "i.e." 的文本分开
Regex R separate punctuation from text preserving "e.g." and "i.e."
我想在 R 中将标点符号与文本分开(在基于 space 进行标记化之前)。
命令:gsub("(?:\b| )?([.,:;!?]+)(?: |\b)?", " \1 ", "Blabla, i.e. blabla...")
输出:"Blabla , i . e . blabla ... "
如您所见,...
被视为一个单元,没有被分解。如何为 i.e
(和 e.g.
)实现同样的事情?
为了清楚起见,期望的输出是:"Blabla , i.e. blabla ... "
如果您只对 i.e.
和 e.g.
作为例外感兴趣,您可以将它们放在列表中以跳过,并匹配所有其他标点符号:
gsub("\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)|(\pP+)", " \1 ",
"Blabla, i.e. e.g. blabla...",
perl=T)
## => [1] "Blabla , i.e. e.g. blabla ... "
见this IDEONE demo and a regex demo
解释:
\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)
- 匹配整个单词 e.g.
或 i.e.
并跳过它们
|
- 或
(\pP+)
- 将一个或多个标点符号匹配并捕获到第 1 组中
要保持修剪到位,请使用
gsub("\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)|(?:\b|\h+)?(\pP+)(?:\b|\h+)?", " \1 ",
"Blabla, i.e. e.g. blabla...",
perl=T)
我想在 R 中将标点符号与文本分开(在基于 space 进行标记化之前)。
命令:gsub("(?:\b| )?([.,:;!?]+)(?: |\b)?", " \1 ", "Blabla, i.e. blabla...")
输出:"Blabla , i . e . blabla ... "
如您所见,...
被视为一个单元,没有被分解。如何为 i.e
(和 e.g.
)实现同样的事情?
为了清楚起见,期望的输出是:"Blabla , i.e. blabla ... "
如果您只对 i.e.
和 e.g.
作为例外感兴趣,您可以将它们放在列表中以跳过,并匹配所有其他标点符号:
gsub("\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)|(\pP+)", " \1 ",
"Blabla, i.e. e.g. blabla...",
perl=T)
## => [1] "Blabla , i.e. e.g. blabla ... "
见this IDEONE demo and a regex demo
解释:
\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)
- 匹配整个单词e.g.
或i.e.
并跳过它们|
- 或(\pP+)
- 将一个或多个标点符号匹配并捕获到第 1 组中
要保持修剪到位,请使用
gsub("\b(?:e\.g\.|i\.e\.)(*SKIP)(*F)|(?:\b|\h+)?(\pP+)(?:\b|\h+)?", " \1 ",
"Blabla, i.e. e.g. blabla...",
perl=T)