頭字語のドットは削除したいが、python文字列のドメイン名は削除したくない。例えば、 は、私は、文字列頭字語でドットを削除する正規表現はありますが、ドメイン名では使用できません。
'a.b.c. [email protected] http://www.test.com'
が
'abc [email protected] http://www.test.com'
私がこれまでに作られた最も近い正規表現は
'ab.c. [email protected] http://www.test.com'
それに起因
re.sub('(?:\s|\A).{1}\.',lambda s: s.group()[0:2], s)
あるになりたいですそうだね上記の正規表現が動作するか、私は
(?:\s|\A|\G).{1}\.
に正規表現を変更する必要がありますが、Pythonで一致マーカー(\ G)の終わりはありません。
編集:私のコメントで述べたように、文字列には特定の書式がありません。これらの文字列には、非公式の人間の会話が含まれているため、0個、1個または複数の頭字語またはドメイン名を含むことがあります。私が "本当の"パーサーをコーディングするのを救うことができれば、いくつかのエラーは私にはうまくいきます。
私見正規表現ではありませんあなたの問題に適したツール。それは可能かもしれないが、過度に複雑なコードにつながる。より伝統的なアプローチを採用し、文字列をコンポーネント(通常のテキスト、頭字語など)に分割し、部分を個別に処理するために、正規表現とPythonコードを組み合わせて使用します。より冗長で、より保守的です。 – sebasgo
私は、非公式の人間の会話を表す一連の文字列を正規化するために、これを一連の他の正規表現の一部として使用していると述べているはずです。もし私がより徹底した解析をするのを救えるならば、私はいくつかのエラーを許容することができます。 – ianalis
問題をよりよく指定する必要があります。あなたのデータは常に3つの区切りの部分に分かれていて、最初の部分だけに影響を与えたいですか?あるいはこれを任意のテキストに適用する必要がありますか?後者の場合、どのように略語を定義しますか?一文字だけ?もしそうなら、http://a.b.example.comで何が起こると思いますか?または、それがドメイン名の一部であることを知っている場合を除いて、埋め込み期間を削除したいのですか?しかし、それは疑問を招くだけです:それはドメイン名の一部です:@またはhttp://の後? ssh:または他のURLスキームはどうですか?いったん定義されると、これらのどれでも簡単な正規表現になります。 – MtnViewMark