簡體   English   中英

使用 Python re.match 提取字符串

[英]Extract string with Python re.match

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 組中。

事實上,還有一種稍微先進的技術可以做同樣的事情,但不需要捕獲(這通常很耗時)。 它使用所謂的后視

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

環視不包括在實際比賽中,因此是預期的結果。

這(或任何其他合理的正則表達式解決方案)不會刪除. s 立即。 但這可以在第二步中輕松完成:

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)
print re.sub(r"[.]","",re.search(r"(?<=//).*?(?=/)",str).group(0))

請參閱此演示

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

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

print final
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('.',''))
import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"
re.findall('//([a-z.]*)', str)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM