提取R(正则表达式)中两个字符之间的子字符串

提取R(正则表达式)中两个字符之间的子字符串,r,regex,R,Regex,我在使用正则表达式从字符串中提取经度和纬度时遇到问题。字符串如下所示: [1] "\"42.352800\" data-longitude=\"-71.187500\" \"22\"></div>" [1]“\”42.352800\”数据经度=\”-71.187500\“\”22\“>” 我希望能够将第一个数字“42.352800”和第二个数字“-71.187500”分别作为两个变量。因为我将在一堆条目上做这个,我需要确保它可以得到这些数字,无论它们是正的还是负的 我想我应

我在使用正则表达式从字符串中提取经度和纬度时遇到问题。字符串如下所示:

[1] "\"42.352800\" data-longitude=\"-71.187500\" \"22\"></div>"
[1]“\”42.352800\”数据经度=\”-71.187500\“\”22\“>”
我希望能够将第一个数字“42.352800”和第二个数字“-71.187500”分别作为两个变量。因为我将在一堆条目上做这个,我需要确保它可以得到这些数字,无论它们是正的还是负的

我想我应该用正则表达式来表示:


latitude我同意@r2evans的观点,即如果您从网页上抓取这些信息,那么使用
rvest
获取数据会简单得多

要回答您的问题,您可以使用
str\u match
获取前两个数字

string <- "\"42.352800\" data-longitude=\"-71.187500\" \"22\"></div>"

stringr::str_match(string, '(\\d+\\.\\d+).*?(-?\\d+\\.\\d+)')[, -1]
#[1] "42.352800"  "-71.187500"

string它看起来像是在抓取HTML(基于
)。最好查看数据源本身,而不是regex,以防它更易于解析。(Regex不应该总是您第一次尝试访问数据。)非常感谢您的回答。工作起来很有魅力。你能再给我解释一下这个表达是怎么回事吗?如果第一个数字是负数,这仍然有效吗?另外,关于rvest的观点也很好。我不使用它的原因是因为位置数据不是您可以使用rvest获取的。它隐藏在网页中的其他内容下面,我无法使用rvest提取它。不,如果第一个数字是负数,这将不起作用,在这种情况下,您需要包含与第二个数字相同的正则表达式
(\\d+\\.\\d+)..*(\\d+\.\\d+
其中
-?
表示可能出现或不出现的可选负号。