r - gsub,括号内的内容偶尔用换行符而不是右括号绑定



>我正在尝试清理一些文本字符串,以便我可以干净地解析出一些脚本信息。 对于这些表,括号内的信息表示脚本的位置或阻止注释。

我想获取所有括号内的信息,并删除括号及其所有包含的字符。 这项工作的扳手是,由于数据最初都是手动编写的,因此并非所有括号内的信息或注释实际上都有一个右括号。 所以 - 我想确定:

  • [
  • 除右方括号、0 次或更多次之外的任何字符
  • 右括号或换行符

示例数据,一个很长的字符串(缩写我自己的)。 通常,每个字符串将是整个剧集的脚本:

"[Bridge]rrnrrn SPOCK: Check the circuit. rrn [Pike's Quarters rrn BOYCE: Boyce here.rrn"

我已经尝试了 gsub 的几种排列方式,主要是沿着以下几行:

df$script <- gsub("\[[^\]]*[\]|\n]", " ", testdf$script)

我认为应该抓住:

\[         an open bracket
[^\]]*     any character except for a closed bracket, 0 or more times
[\]|\n]   either a closed bracket, or a new line metachar

但我每次都是空的。 我已经尝试了该 gsub 系列的其他变体,因为我的正则表达式是阻碍我前进的原因。 这些都已尝试,没有更改我的字符串:

df$script <- gsub("\[[^\]]*[\]\n]", " ", testdf$script)
df$script <- gsub("\[[^\]]*[\]|\n]", " ", testdf$script)
df$script <- gsub("\[[^\]]*[\](\n)]", " ", testdf$script)
df$script <- gsub("\[[^\]]*[\]|(\n)]", " ", testdf$script)

我知道正则表达式抓取的 HTML 可能会让我在这里发臭;不幸的是,这是我处理这个字符串的唯一工具。 我在使用其他一些语言正则表达式模拟器方面取得了不同程度的成功,但是关于 R gsub 的一些东西并不在我尝试如何处理元字符的情况下。 任何建议将不胜感激。

您可以使用以下PCRE正则表达式(将perl=TRUE参数传递给gsub)

[[^]rn]*(?:]|R)

请参阅正则表达式演示。

图案详细信息

  • [-[
  • [^]rn]*- 除]、CR 和 LF 以外的 0+ 个字符
  • (?:]|R)-](]) 或 (|) 换行符序列 (R)

R 演示:

x <- "[Bridge]rrnrrn SPOCK: Check the circuit. rrn [Pike's Quarters rrn BOYCE: Boyce here.rrn"
x <- gsub("\[[^]rn]*(?:]|\R)", " ", x, perl=TRUE)
x
## => [1] " rrnrrn SPOCK: Check the circuit. rrn  rn BOYCE: Boyce here.rrn"

最新更新