25
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)は同じようです。

4

5 に答える 5

41

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)
于 2012-11-16T20:07:36.753 に答える
3
print re.sub(r"[.]","",re.search(r"(?<=//).*?(?=/)",str).group(0))

このデモを参照してください。

于 2012-11-16T20:19:41.890 に答える