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)
是相同的。
答案 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)