我正在尝试使用r从Google链接中提取UTM,但是我的正则表达式似乎无法正常工作。
以下是Google链接的示例:
xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco
我尝试了以下正则表达式来提取TOTO
:
.+&utm_campaign=([[a-z]]+)&.+
没有成功。
如果有人可以帮助,谢谢!
答案 0 :(得分:1)
在您的模式中,[[a-z]]+
是格式错误的括号表达式,因为它匹配[[a-z]
括号表达式中的任何字符(任何小写ASCII字母或[
),然后匹配一个或多个]
个字符。您打算在此处使用单个[
和]
。
您可以将sub
与以下正则表达式配合使用:
sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)
请参见regex demo。
详细信息
.*
-任意0个以上的字符,并且尽可能多[&?]
-一个?
或&
utm_campaign=
-文字子字符串([^&]+)
-捕获第1组:除&
字符以外的一个或多个字符.*
-任意0个以上的字符,并且尽可能多 \1
是替换后向引用,它将第1组的内容放入结果中。
请参见R demo:
s <- "xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco"
sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)
## => [1] "TOTO"
答案 1 :(得分:0)
答案 2 :(得分:0)
您正在搜索[[a-z]]+
,但是TOTO
是大写的,因此不在'a'和'z'之间。您可以将其更新为[[A-Za-z]]+
以匹配任何大小写字母。
编辑:[[A-Za-z]]+
将匹配任何大小写字母,但也匹配任何'['或']'字符。如果您不希望匹配这些字母,则可以将其更改为[A-Za-z]+
以仅匹配任何大小写字母
答案 3 :(得分:0)
这是一个正则表达式字符串,无论其在查询字符串中的位置如何,它都将与utm_campaign
参数的值匹配。
(?<TOTO>(?<=utm_campaign=).*?(?=&|$))
说明:
?<TOTO>
在执行正则表达式后将结果捕获到TOTO
密钥中
(?<=utm_campaign=)
是一种后置形式,可以确保该值前面带有utm_campaign=
.*?
将找到参数值(即TOTO
)。 ?
的原因是延迟评估-它只会搜索直到匹配下一个规则(请参阅下面的要点)
(?=&|$)
是一种前向匹配,将匹配&
或字符串的结尾(如果utm_campaign
是最后一个参数)