3

選択した文字列の語順を逆にするSublimeTextプラグイン(Pythonを使用)を作成しようとしています。主な機能は動作していますが、問題は、単語の末尾にあるすべての記号(ピリオド、コンマ、疑問符など)がそのまま残り、記号が移動するようにすべてを正しく反転させることです。単語の先頭に。

def run(self, edit):
    selections = self.view.sel()

    # Loop through multiple text selections
    for location in selections:

        # Grab selection
        sentence = self.view.substr(location)

        # Break the string into an array of words
        words = sentence.split()

        # The greasy fix
        for individual in words:
            if individual.endswith('.'):
                words[words.index(individual)] = "."+individual[:-1]

        # Join the array items together in reverse order
        sentence_rev = " ".join(reversed(words))

        # Replace the current string with the new reversed string
        self.view.replace(edit, location, sentence_rev) 

    # The quick brown fox, jumped over the lazy dog.
    # .dog lazy the over jumped ,fox brown quick The

私は各単語をループしてendswith()メソッドを使用してすばやく修正することができましたが、これでは複数のシンボルが見つからないか(ifステートメントの長いリストがない場合)、複数のシンボルを考慮してすべてを移動することはできません。

私は正規表現で遊んでいますが、まだ機能する解決策がありません。シンボルのインデックスを変更する方法を探していましたが、それでも何もありません...

詳細をお知らせいただければお知らせください。

ありがとう!

4

2 に答える 2

0

正規表現がより良い方法だと思いますが、それが役立つ場合は...

あなたはendswithを使用する代わりにあなたが呼び出す関数を持つことができます...

def ends_with_punctuation(in_string):
    punctuation = ['.', ',', ':', ';', '!', '?']
    for p in punctuation:
        if in_string.endswith(p):
            return True
    return False
于 2012-12-14T21:06:44.373 に答える
0

代わりに、単語の区切りで分割するように行をimport re変更できる場合:split()\b

words = re.sub(r'\b', '\f', sentence).split('\f')

あなたがただできない理由についてはこれsplit(r'\b')を見てください。上記はあなたに与えるでしょう:

['', 'The', ' ', 'quick', ' ', 'brown', ' ', 'fox', ', ', 'jumps', ' ', 'over', ' ', 'the', ' ', 'lazy', ' ', 'dog', '.']

その後、簡単に反転して、正しい場所にシンボルを配置できます。

于 2012-12-14T20:33:57.690 に答える