繁体   English   中英

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

[英]Regex. Match words that contain special characters or '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://匹配,后跟一个或多个非空格字符。 右边的部分匹配零个或多个非空格字符,后跟任何不是单词或空格字符的内容,后跟零个或多个非空格字符 - 确保您有一个至少有一个非字符串的字符串字符,没有空格。

更新:当然,正如其他答案暗示的那样,因为http://前缀包含非单词字符( / ),您不需要将其作为替代 - 您可以将正则表达式简化为\\S*[^\\w\\s]\\S* 但是,也许上面的例子中的替换仍然有用。

您可以使用预测:

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

说明:

  • (?:\\s|^)表示我们的单词启动正则表达式或以空格开头。 (这个空间不属于这个词)。
  • (\\w+)匹配一个单词(并且是我们感兴趣的)。
  • (?=\\s|$)表示我们的单词后跟空格或字符串结尾。 (再一次,空间不属于这个词)。

不使用正则表达式,但也许这可以工作? (我假设':'和'/'是特殊字符,因此它会隐式删除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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM