25
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"

在这种情况下,我基本上想要以 and 为界的//东西/。我该如何做到这一点?

还有一个问题:

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)一样。

4

5 回答 5

41

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

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

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

事实上,有一种稍微高级一点的技术可以做到这一点,但不需要捕获(这通常很耗时)。它使用所谓的lookbehind

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

Lookarounds 不包括在实际匹配中,因此是所需的结果。

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

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

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

当然,如果你想删除除字母和数字之外的所有内容(例如www.regular-expressions.info变成wwwregularexpressionsinfo),那么你最好使用 regex 版本replace

cleanedHost = re.sub(r"[^a-zA-Z0-9]+", "", host)
于 2012-11-16T20:07:36.753 回答
3
print re.sub(r"[.]","",re.search(r"(?<=//).*?(?=/)",str).group(0))

请参阅此演示

于 2012-11-16T20:19:41.890 回答
2
output=re.findall("(?<=//)\w+.*(?=/)",str)

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

print final
于 2014-08-14T15:59:57.257 回答
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('.',''))
于 2021-05-17T13:06:50.307 回答
-1
import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"
re.findall('//([a-z.]*)', str)
于 2017-01-16T10:58:16.990 回答