RE

2017-04-27 4 views
0

私は入力文字列を分割して、Pythonでトークン化しようとしていますが、これまでに試みられたすべての試みはPythonの「何も繰り返さない」という結果になります。RE

現在、私はre.splitの代わりにre.findallを使用していますが、私の間違いが私の正規表現とどこにあるのか分かりません。

私の現在の正規表現は、次のようになります。

inputList = re.findall(R "| [。!?、;] | [\ W '] + [\ s]は"、たTestString)

句読点や空白に分割したいと思います。

私が以前試した:

inputList = re.split(R '(\ sは| \ W)*'、たTestString)

しかし、これは私に望ましくない出力文字列を与えるだろう。

私も試してみました:

inputList = re.split(R '| [。!?、;](\は+ S)(+)'、たTestString)

しかしなっていました同じエラー。

たTestStringの例:

たTestString = "!美しいジョン王???私はここにいるそれは時間「試合です。。"

所望の出力の例: '!'

[ '美しい'、 ''、 'キング'、 ''、 'ジョン'、 ''、 ''、「?? '、' '、' '、' '、' '、' '' '' '' '' '' '' '' '' '' '' '' ' ']

私はre.findallで正しい出力を得ていますが、Pythonはエラーを投げており、可能ならばそれを取り除きたいと思います。 誰かが私の正規表現で作っているエラーを指摘できますか?

この作品、あまりにも空の文字列を与えるあなたの例のための
+1

たTestStringの例はに参考になっだろうあなたの質問 –

+0

に答えてください。サンプルのtestStringを含むように編集されました。 – Stravask

答えて

0

re.split(r'([ !?.])', testString) 

# ['Beautiful', ' ', 'King', ' ', 'John', '!', '', ' ', '', '?', '', '?', '', '?', '', ' ', "I'm", ' ', 'here', '.', '', ' ', "It's", ' ', "'bout", ' ', 'time', '.', ''] 

が、ご希望の出力が離れてそしてちょうどフィルターOPです:

inputList = [t for t in re.split(r'([ !?.])', t) if t] 

# ['Beautiful', ' ', 'King', ' ', 'John', '!', ' ', '?', '?', '?', ' ', "I'm", ' ', 'here', '.', ' ', "It's", ' ', "'bout", ' ', 'time', '.'] 
+0

ありがとう、私は助けに感謝します! – Stravask