_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)
は同じようです。
match
は、entire文字列との一致を試みます。代わりにsearch
を使用してください。次のパターンが要件に一致します。
m = re.search(r"//([^/]*)", str)
print m.group(1)
基本的に、/
を探してから、できるだけ多くの非スラッシュ文字を消費します。そして、これらの非スラッシュ文字はグループ番号1でキャプチャされます。
実際、同じことを行う少し高度なテクニックがありますが、キャプチャは必要ありません(一般的に時間がかかります)。いわゆる lookbehind を使用します。
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)
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