首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配以已知模式开头的单词

匹配以已知模式开头的单词
EN

Stack Overflow用户
提问于 2014-08-08 01:54:02
回答 3查看 1.5K关注 0票数 3

我正在努力匹配一个以已知模式开头,以空格或字符串结尾结束的完整单词。我想我有这个词的句型:

代码语言:javascript
复制
pat <- "https?:\\/\\/.*"

require(stringr)
str_extract("http://t.co/som7hing", pat)
# [1] "http://t.co/som7hing" # So far so good...

我不明白的是如何定义这个词的界限。有四种可能的情况需要考虑:

  1. 我的URL位于字符串的开头
  2. 我的URL在字符串的末尾
  3. 我的URL前面有其他标记
  4. 我的URL后面跟着其他标记

在所有四种情况下,我的模式应该只匹配URL,从头到尾。

代码语言:javascript
复制
str_extract("something something http://t.co/som7hing", pat)
# [1] "http://t.co/som7hing" 

到目前为止还不错..。

代码语言:javascript
复制
str_extract("http://t.co/som7hing ", pat)
# [1] "http://t.co/som7hing " 

第一个问题,尾随空间也是匹配的。

代码语言:javascript
复制
str_extract("http://t.co/som7hing #hash name", pat)
# [1] "http://t.co/som7hing #hash name" 

第二个问题,所有尾随词都匹配。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-08 02:02:54

你要找的模式是

代码语言:javascript
复制
pat <- "https?:\\/\\/\\S*"

regex中的.将匹配任何字符,包括空格。您想要的是匹配任何非空白字符,这是使用\S完成的。

票数 4
EN

Stack Overflow用户

发布于 2014-08-08 02:05:36

*是一个贪婪操作符;在匹配尾随空格和尾随词时都会出现问题。因此,.*将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。

我建议使用以下正则表达式:

代码语言:javascript
复制
re <- '\\bhttps?://\\S+'

我们使用\b,这是一个字界。单词边界不消耗任何字符。它断言,一边有一个字字,另一边没有字。\S匹配任何非空白字符.

当我们在发布的例子中执行此操作时,您可以看到。

代码语言:javascript
复制
x  <- c('http://t.co/som7hing', 
        'http://t.co/som7hing ',
        'something something http://t.co/som7hing', 
        'http://t.co/som7hing #hash name',
        'foohttp://www.example.com',
        'barhttp://www.foo.com    ')

re <- '\\bhttps?://\\S+'

for (i in x) print(str_extract(i, re))
# [1] "http://t.co/som7hing"
# [1] "http://t.co/som7hing"
# [1] "http://t.co/som7hing"
# [1] "http://t.co/som7hing"
# [1] NA
# [1] NA

最后两个由于单词边界而不匹配,现在如果要匹配字符串中任何位置的前缀,请从正则表达式中删除边界。

票数 4
EN

Stack Overflow用户

发布于 2014-08-08 02:08:11

我觉得这很管用。它与一个空间相匹配,然后停在那里。我使用反斜杠来转义地址中的冒号和正斜杠。我没有匹配任何数字的字符,而是匹配了任何不是空格的字符!\S

代码语言:javascript
复制
https?\:\/\/[!\S]*

我在http://regexpal.com/上测试过这个

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25194970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档