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)
是一样的。
最佳答案
match
尝试匹配 整个 字符串。请改用 search
。然后,以下模式将符合您的要求:
m = re.search(r"//([^/]*)", str)
print m.group(1)
基本上,我们正在寻找 /
,然后使用尽可能多的非斜线字符。并且那些非斜线字符将被捕获到第 1 组中。
事实上,有一种更高级的技术可以做到这一点,但不需要捕获(这通常很耗时)。它使用所谓的lookbehind :
m = re.search(r"(?<=//)[^/]*", str)
print m.group()
lookarounds 不包含在实际匹配中,因此是所需的结果。
此(或任何其他合理的正则表达式解决方案)不会立即删除 .
。但这可以在第二步中轻松完成:
m = re.search(r"(?<=//)[^/]*", str)
host = m.group()
cleanedHost = host.replace(".", "")
这甚至不需要正则表达式。
当然,如果您想删除除字母和数字之外的所有内容(例如,将 www.regular-expressions.info
转换为 wwwregularexpressionsinfo
),那么您最好使用 replace
的正则表达式版本:
cleanedHost = re.sub(r"[^a-zA-Z0-9]+", "", host)
关于python - 使用 Python re.match 提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423624/