gsub,括号内的内容偶尔由换行符而不是右括号绑定
gsub, bracketed content occasionally bound by newline instead of closing bracket
我正在尝试清理一些文本字符串,以便我可以干净地解析出一些脚本信息。对于这些表,括号中的信息表示脚本的位置或块注释。
我想获取所有括号内的信息,并删除括号及其包含的所有字符。工作中的问题在于,由于数据最初都是手动编写的,因此并非所有括号内的信息或注释实际上都有右括号。所以 - 我想确定:
- [
- 除右括号外的任何字符,0 次或多次
- 右括号或换行符\n
示例数据,一个很长的字符串(我自己的缩写)。通常每个字符串都是一整集的脚本:
"[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
我尝试了 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 行上尝试了其他变体,因为我的 regex-fu 阻碍了我。这些都已经尝试过了,我的字符串没有改变:
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
)
\[[^]\r\n]*(?:]|\R)
参见regex demo。
图案详情
\[
- 一个 [
字符
[^]\r\n]*
- ]
、CR 和 LF 以外的 0+ 个字符
(?:]|\R)
- ]
(]
) 或 (|
) 换行序列 (\R
)
x <- "[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
x <- gsub("\[[^]\r\n]*(?:]|\R)", " ", x, perl=TRUE)
x
## => [1] " \r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n \r\n BOYCE: Boyce here.\r\r\n"
我正在尝试清理一些文本字符串,以便我可以干净地解析出一些脚本信息。对于这些表,括号中的信息表示脚本的位置或块注释。
我想获取所有括号内的信息,并删除括号及其包含的所有字符。工作中的问题在于,由于数据最初都是手动编写的,因此并非所有括号内的信息或注释实际上都有右括号。所以 - 我想确定:
- [
- 除右括号外的任何字符,0 次或多次
- 右括号或换行符\n
示例数据,一个很长的字符串(我自己的缩写)。通常每个字符串都是一整集的脚本:
"[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
我尝试了 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 行上尝试了其他变体,因为我的 regex-fu 阻碍了我。这些都已经尝试过了,我的字符串没有改变:
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
)
\[[^]\r\n]*(?:]|\R)
参见regex demo。
图案详情
\[
- 一个[
字符[^]\r\n]*
-]
、CR 和 LF 以外的 0+ 个字符
(?:]|\R)
-]
(]
) 或 (|
) 换行序列 (\R
)
x <- "[Bridge]\r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n [Pike's Quarters \r\r\n BOYCE: Boyce here.\r\r\n"
x <- gsub("\[[^]\r\n]*(?:]|\R)", " ", x, perl=TRUE)
x
## => [1] " \r\r\n\r\r\n SPOCK: Check the circuit. \r\r\n \r\n BOYCE: Boyce here.\r\r\n"