Python re.matchで文字列を抽出する 質問する

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#[email protected].: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)同じようです。

ベストアンサー1

match一致しようとする全体文字列。search代わりに を使用してください。次のパターンが要件に一致するようになります。

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

基本的に、 を探して/、できるだけ多くの非スラッシュ文字を消費します。そして、それらの非スラッシュ文字はグループ番号 1 にキャプチャされます。

実際、同じことを行うもう少し高度な技術がありますが、キャプチャ(通常は時間がかかります)は必要ありません。いわゆる後ろを見て:

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

ルックアラウンドは実際の試合には含まれないので、望ましい結果が得られます。

これ (または他の適切な正規表現ソリューション) では、.s はすぐには削除されません。ただし、2 番目のステップで簡単に実行できます。

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)

おすすめ記事