我有一个字符串,我想在其中离开城市,在本例中它将是‘Elland Rd’和‘Leeds’.
mystring = "0000\" club_info=\"Elland Rd, Leeds\" Pitch=\"100x50\""
city = gsub(".* club_info=\"(.*),(.+)\.*", "\\2", mystring) #cant get this part to work
我获取城市的理论是搜索逗号之后直到反斜杠的所有内容,但我似乎无法让它识别反斜杠
我有一个字符串,我想在其中离开城市,在本例中它将是‘Elland Rd’和‘Leeds’.
mystring = "0000\" club_info=\"Elland Rd, Leeds\" Pitch=\"100x50\""
city = gsub(".* club_info=\"(.*),(.+)\.*", "\\2", mystring) #cant get this part to work
我获取城市的理论是搜索逗号之后直到反斜杠的所有内容,但我似乎无法让它识别反斜杠
我更喜欢strcapture
提取多个模式副重复gsub
ing,这个怎么样?
strcapture('.*club_info="([^"]+),([^"]+)".(.*)', mystring, list(x1="", x2="", x3=""))
# x1 x2 x3
# 1 Elland Rd Leeds Pitch="100x50"
(它不需要包括Pitch=
,但我认为您可能会使用它,因为您似乎正在进行简化gsub
运算.)
仅供参考,这里的x2
有一个前导空格;它可以在正则表达式中处理,但如果您不是x2
%肯定它在所有情况下都是如此,那么添加trimws(.)
可能会更简单,如下所示
strcapture('.*club_info="([^"]+),([^"]+)".(.*)', mystring, list(x1="", x2="", x3="")) |>
lapply(trimws)
# $x1
# [1] "Elland Rd"
# $x2
# [1] "Leeds"
# $x3
# [1] "Pitch=\"100x50\""
在这种情况下,它确实从data.frame
下降到list
,但我不确定need是一个帧,一个命名列表应该足够了.如果您真的想要它作为框架-我的许多用例都很喜欢这样-只需在管道中添加|> as.data.frame()
即可.
Regex漫步餐厅.
.*club_info="([^"]+),([^"]+)".(.*)
^^ leading/trailing text, discarded
^^^^^^^^^^^ literal text
[^"]+ [^"]+ one or more "any character except dquote"
( ),( ) two capture-groups
此外,由于我们知道模式中将使用双引号而不是单引号,因此我 Select 使用单引号作为外部字符串定义的分界.如果我们有both个,或者如果你想避免双反斜杠之类的,我们可以使用R的"原始字符串",
r"{.*club_info="([^"]+),([^"]+)".(.*)}"
其中r"{
和}"
是开始/结束分隔符;我在这里 Select 大括号是因为花括号在视觉上与正则括号混淆,尽管方括号r"[
/]"
和圆括号r"(
/)"
也可以.