ためのハイフンを除くすべての句読点を削除し、私持っている正規表現文字列からすべての句読点を除去するため、このコード:Pythonの正規表現、Unicode文字列
import regex as re
re.sub(ur"\p{P}+", "", txt)
がどのようにハイフンを許可するように変更するのでしょうか?あなたがどのようにそれをやったのか説明できるなら、それは素晴らしいでしょう。私はここでそれを理解する、私が間違っている場合はそれを修正し、句読点の後に何かを付ける。
ためのハイフンを除くすべての句読点を削除し、私持っている正規表現文字列からすべての句読点を除去するため、このコード:Pythonの正規表現、Unicode文字列
import regex as re
re.sub(ur"\p{P}+", "", txt)
がどのようにハイフンを許可するように変更するのでしょうか?あなたがどのようにそれをやったのか説明できるなら、それは素晴らしいでしょう。私はここでそれを理解する、私が間違っている場合はそれを修正し、句読点の後に何かを付ける。
[^\P{P}-]+
\P
は\p
の補完的である - ない句読点。したがって、これはではなく、(句読点やダッシュではありません)と一致し、ダッシュ以外のすべての句読点になります。
例:あなたは非複雑な方法をしたい場合はhttp://www.rubular.com/r/JsdNM3nFJ3
、代替が\p{P}(?<!-)
次のとおりです。すべての句読点にマッチし、それが(負の後読みを使用して)ダッシュませんでした確認してください。
の作業例:http://www.rubular.com/r/5G62iSYTdk
あなたは[._,]
のように、手動で削除したい句読点を指定するか、代わりに置換文字列の機能を提供することができ、次のいずれか
re.sub(r"\p{P}", lambda m: "-" if m.group(0) == "-" else "", text)
ここ場合には、標準ライブラリに固執する必要があり、re
モジュールでそれを行う方法は次のとおりです。
# works in python 2 and 3
import re
import string
remove = string.punctuation
remove = remove.replace("-", "") # don't remove hyphens
pattern = r"[{}]".format(remove) # create the pattern
txt = ")*^%{}[]thi's - is - @@#!a !%%!!%- test."
re.sub(pattern, "", txt)
# >>> 'this - is - a - test'
パフォーマンスの問題は、あなたがstr.translate
を使用する可能性がある場合は、以来、 it's faster than using a regex。 Python 3では、コードはtxt.translate({ord(char): None for char in remove})
です。
ここで 're'は' \ p'を持つ[このモジュール](https://pypi.python.org/pypi/regex)を指します。 –
@ジェリー - 私はちょっと見て、これを見つけました:http://stackoverflow.com/a/4316097/7586これは 'regex'であり、' re'ではありません。彼らは2つ持っていると思います。 – Kobi
@ Kobiああ...それはそれを説明すると思います。 – Jerry