正则表达式。 包含特殊字符或单词匹配的“http://”

我想匹配包含特殊字符或与开头的单词的“http://”

所以这句话

他%#LLO,我的网站是:http://www.url.com/abcdef123

应该把这个

我的网站

到目前为止,我有这个

re.sub(r"^[^\w]", " ", "%he#llo, my website is: http://www.url.com/abcdef123")

这只是删除了符号,但它不会删除与符号(它也不会删除':'和',')相关联的话,也不会删除URL。

--------------解决方案-------------

对于你给的例子字符串,下面的正则表达式工程确定:

>>> a = '%he#llo, my website is: http://www.url.com/abcdef123'
>>> re.findall('(http://\S+|\S*[^\w\s]\S*)',a)
['%he#llo,', 'is:', 'http://www.url.com/abcdef123']

...或者你可以删除这些文字re.sub

>>> re.sub('(http://\S+|\S*[^\w\s]\S*)','',a)
' my website '

|意味着交替和将匹配于该组内的任一侧的表达。 左侧的部分相匹配http://后面是一个或多个非空格字符。 在右侧的部分相匹配的零个或多个非空格字符,后面任何不是一个字或空格字符,后面的零或多个非空格字符 - 即确保您有一个字符串与至少一个非-word性格和没有空格。

更新:当然,作为其他的答案含蓄暗示,由于http://前缀包含非字字符( / )你不需要有作为替代-你可以简化正则表达式\S*[^\w\s]\S* 。 不过,也许上面交替的例子仍然是有用的。

你可以用一下aheads:

>>> re.findall(r"(?:\s|^)(\w+)(?=\s|$)", "Start %he#llo, my website is: http://www.url.comabcdef123 End")
['Start', 'my', 'website', 'End']

说明:

  • (?:\s|^)意味着我们的单词开始的正则表达式,或用空格preceeded。 (与空间不属于该字)。
  • (\w+)匹配一个单词(而这也正是我们感兴趣的)。
  • (?=\s|$)意味着我们的字后面的字符串空间或结束。 (再一次,该空间不属于该字)。

不使用regexs,但也许这可以工作? (我假设':'和'/'是特殊字符,所以它会隐式删除URL)

def good_word(word):
import string
for c in word:
if not c in string.ascii_letters:
return False
return True

def clean_string(str):
return ' '.join([w for w in input.split() if good_word(w)])

print clean_string("%he#llo, my website is: http://www.url.com/abcdef123")

分类:蟒蛇 时间:2012-03-09 人气:0
本文关键词: 正则表达式,蟒蛇
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.200 (s). 10 q(s)