python - 使用 Python re.match 提取字符串

标签 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)是一样的。

最佳答案

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/

相关文章:

python - 如何将二元类 Logistic 回归与 Python 合并

python - 在 Pandas 中使用 For 循环的数据框

python - 无法使用 Mechanize 找到表格

python - 从python中的切片对象获取索引值

PHP将html字符串分割成一个数组,以标签的类名作为键

python - 如何从现有数据框创建新数据框?

python - 将列表操作的结果分配给 var

python - 在 scikit-learn 教程中可视化支持向量机的参数

c++ - 查找文件名中的数字并与其他数字交叉引用

java - 提取数字之间的字符串