繁体   English   中英

正则表达式R从保留“eg”和“ie”的文本中分隔标点符号

[英]Regex R separate punctuation from text preserving “e.g.” and “i.e.”

我想将标点符号与R中的文本分开(在基于空格的标记化之前)。

命令: gsub("(?:\\b| )?([.,:;!?]+)(?: |\\b)?", " \\\\1 ", "Blabla, ie blabla...")

输出: "Blabla , i . e . blabla ... "

正如你所看到的...被认为是一个单元,并没有被分解。 如何实现同样的事情ie (及eg )?

为了说清楚,所需的输出是: "Blabla , ie blabla ... "

如果您只对ie感兴趣, eg作为例外,您可以将它们放在列表中以跳过,并匹配所有其他标点符号:

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 ... "

请参阅此IDEONE演示正则表达式演示

说明

  • \\\\b(?:e\\\\.g\\\\.|i\\\\.e\\\\.)(*SKIP)(*F) - 匹配整个单词egie并跳过它们
  • | - 要么
  • (\\\\pP+) - 匹配并捕获组1中的一个或多个标点符号

要保持修剪,请使用

gsub("\\b(?:e\\.g\\.|i\\.e\\.)(*SKIP)(*F)|(?:\\b|\\h+)?(\\pP+)(?:\\b|\\h+)?", " \\1 ", 
  "Blabla, i.e. e.g. blabla...",
     perl=T)

另一个正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM