R正则表达式从文本文件中提取电视节目名称
R regular expression to extract TV show name from text file
我正在尝试使用 R 从 txt 文件中提取电视节目名称。
我已经加载了 txt 并将其分配给一个名为 txt 的变量。现在我正在尝试使用正则表达式来提取我想要的信息。
我要提取的信息模式是
SHOW: Game of Thrones 7:00 PM EST
SHOW: The Outsider 3:00 PM EST
SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST
等等。大约有320个节目,我想提取所有320个。
到目前为止,我已经想到了这个。
pattern <- "SHOW:\s\w*"
str_extract_all(txt, pattern3)
但是,它并没有像我预期的那样提取整个标题名称。 (例如:它将提取“SHOW:Game”而不是“SHOW:权力的游戏”。如果我要提取那个节目,我只会使用 "SHOW:\s\w*\s\w*\s\w*
来匹配字数,但我想提取全部以txt形式显示,包括长短名字。
我应该如何编写正则表达式以获得预期的结果?
这行得通吗,使用环顾四周:
str_extract(st, '(?<=SHOW: )(.*)(?= \d{1,2}:.. [PA]M ...)')
[1] "Game of Thrones"
[2] "The Outsider"
[3] "Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
显示:
str_extract(st, '(.*)(?= \d{1,2}:.. [PA]M ...)')
[1] "SHOW: Game of Thrones"
[2] "SHOW: The Outsider"
[3] "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
数据:
st
[1] "SHOW: Game of Thrones 7:00 PM EST"
[2] "SHOW: The Outsider 3:00 PM EST"
[3] "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST"
您可以通过匹配 SHOW:
并在第一次出现 AM 或 PM 之前尽可能不匹配地捕获第 1 组中的数据,从而在不使用环视的情况下获取值。
\bSHOW:\s+(.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b
说明
\bSHOW:\s+
一个单词边界,匹配 SHOW:
和 1+ 个空白字符
(.*?)
捕获第1组,尽可能少的匹配(非贪心)
\s+\d{1,2}:\d{1,2}
匹配 1+ 个空白字符,1-2 位数字 :
1-2 位数字
\s+[AP]M\b
匹配 1+ 个空白字符后跟 AM 或 PM 和单词边界
library(stringr)
txt <- c("SHOW: Game of Thrones 7:00 PM EST", "SHOW: The Outsider 3:00 PM EST", "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST")
pattern <- "\bSHOW:\s+(.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b"
str_match(txt, pattern)[,2]
输出
[1] "Game of Thrones"
[2] "The Outsider"
[3] "Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
如果你想包含SHOW,它可以是捕获组的一部分。
\b(SHOW:.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b
我正在尝试使用 R 从 txt 文件中提取电视节目名称。
我已经加载了 txt 并将其分配给一个名为 txt 的变量。现在我正在尝试使用正则表达式来提取我想要的信息。
我要提取的信息模式是
SHOW: Game of Thrones 7:00 PM EST
SHOW: The Outsider 3:00 PM EST
SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST
等等。大约有320个节目,我想提取所有320个。
到目前为止,我已经想到了这个。
pattern <- "SHOW:\s\w*"
str_extract_all(txt, pattern3)
但是,它并没有像我预期的那样提取整个标题名称。 (例如:它将提取“SHOW:Game”而不是“SHOW:权力的游戏”。如果我要提取那个节目,我只会使用 "SHOW:\s\w*\s\w*\s\w*
来匹配字数,但我想提取全部以txt形式显示,包括长短名字。
我应该如何编写正则表达式以获得预期的结果?
这行得通吗,使用环顾四周:
str_extract(st, '(?<=SHOW: )(.*)(?= \d{1,2}:.. [PA]M ...)')
[1] "Game of Thrones"
[2] "The Outsider"
[3] "Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
显示:
str_extract(st, '(.*)(?= \d{1,2}:.. [PA]M ...)')
[1] "SHOW: Game of Thrones"
[2] "SHOW: The Outsider"
[3] "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
数据:
st
[1] "SHOW: Game of Thrones 7:00 PM EST"
[2] "SHOW: The Outsider 3:00 PM EST"
[3] "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST"
您可以通过匹配 SHOW:
并在第一次出现 AM 或 PM 之前尽可能不匹配地捕获第 1 组中的数据,从而在不使用环视的情况下获取值。
\bSHOW:\s+(.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b
说明
\bSHOW:\s+
一个单词边界,匹配SHOW:
和 1+ 个空白字符(.*?)
捕获第1组,尽可能少的匹配(非贪心)\s+\d{1,2}:\d{1,2}
匹配 1+ 个空白字符,1-2 位数字:
1-2 位数字\s+[AP]M\b
匹配 1+ 个空白字符后跟 AM 或 PM 和单词边界
library(stringr)
txt <- c("SHOW: Game of Thrones 7:00 PM EST", "SHOW: The Outsider 3:00 PM EST", "SHOW: Don't Be a Menace to South Central While Drinking Your Juice In The Hood 10:00 AM EST")
pattern <- "\bSHOW:\s+(.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b"
str_match(txt, pattern)[,2]
输出
[1] "Game of Thrones"
[2] "The Outsider"
[3] "Don't Be a Menace to South Central While Drinking Your Juice In The Hood"
如果你想包含SHOW,它可以是捕获组的一部分。
\b(SHOW:.*?)\s+\d{1,2}:\d{1,2}\s+[AP]M\b