使用Python re.match提取字符串

时间:2012-11-16 20:03:40

标签: python regex python-2.7

import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"

str2=re.match("[a-zA-Z]*//([a-zA-Z]*)",str)
print str2.group()

current result=> error
expected => wwwqqqzzz

我想提取字符串wwwqqqzzz。我怎么做的?

也许有很多点,例如:

"whatever..s#$@.d.:af//wwww.xxx.yn.zsdfsd.asfds.f.ds.fsd.whatever/123.dfiid"

在这种情况下,我基本上想要///限制的内容。我如何实现这一目标?

另外一个问题:

import re
str="xxx.yyy.xxx:80"

m = re.search(r"([^:]*)", str)
str2=m.group(0)
print str2
str2=m.group(1)
print str2

似乎m.group(0)m.group(1)是相同的。

5 个答案:

答案 0 :(得分:38)

match尝试匹配整个字符串。请改用search。以下模式将符合您的要求:

m = re.search(r"//([^/]*)", str)
print m.group(1)

基本上,我们正在寻找/,然后使用尽可能多的非斜杠字符。这些非斜杠字符将在第1组中捕获。

事实上,有一种稍微先进的技术可以做同样的事情,但不需要捕获(这通常非常耗时)。它使用了所谓的lookbehind

m = re.search(r"(?<=//)[^/]*", str)
print m.group()

实际匹配中不包括外观,因此需要结果。

此(或任何其他合理的正则表达式解决方案)不会立即删除.。但这可以在第二步轻松完成:

m = re.search(r"(?<=//)[^/]*", str)
host = m.group()
cleanedHost = host.replace(".", "")

这甚至不需要正则表达式。

当然,如果你想删除除字母和数字之外的所有内容(例如将www.regular-expressions.info转换为wwwregularexpressionsinfo),那么最好使用replace的正则表达式版本:< / p>

cleanedHost = re.sub(r"[^a-zA-Z0-9]+", "", host)

答案 1 :(得分:3)

print re.sub(r"[.]","",re.search(r"(?<=//).*?(?=/)",str).group(0))

请参阅 this demo

答案 2 :(得分:2)

output=re.findall("(?<=//)\w+.*(?=/)",str)

final=re.sub(r"[^a-zA-Z0-9]+", "", output [0])

print final

答案 3 :(得分:0)

import re
str_1="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"

str2=re.match(".*//([a-zA-Z.]*)",str_1)
print(str2.group(1).replace('.',''))

答案 4 :(得分:-1)

import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"
re.findall('//([a-z.]*)', str)