web-dev-qa-db-ja.com

すべての単語で最初に出現する文字を置き換えるにはどうすればよいですか?

すべての単語で最初に出現する文字を置き換えるにはどうすればよいですか?

次の文字列があるとします。

_hello @jon i am @@here or @@@there and want some@thing in '@here"
#     ^         ^^        ^^^                   ^          ^ 
_

そして、すべてのWordの最初の_@_を削除して、次のような最終的な文字列を取得するようにします。

_hello jon i am @here or @@there and want something in 'here
#     ^        ^        ^^                   ^         ^
_

明確にするために、「@」文字は常にすべてのWordで一緒に表示されますが、Wordの先頭または他の文字の間に置くことができます。

「@」文字が1回だけ発生する場合、 Delete substringで見つかった正規表現のバリエーションを使用して、それが1回発生すると削除されましたが、python /で2回続けて削除されませんでした。 、否定先読みと否定後読みを使用します。

_@(?!@)(?<!@@)
_

出力を確認します。

_>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub(r'@(?!@)(?<!@@)', '', s)
"hello jon i am @@here or @@@there and want something in 'here"
_

したがって、次のステップは、「@」が複数回出現する場合に置き換えることです。これは、s.replace('@@', '@')を実行して、「@」が再び発生する場所から削除することで簡単に行えます。

しかし、私は疑問に思います:この交換を一度に行う方法はありますか?

最後の文字だけが@で、それを削除したくない場合、または特定の許可された開始文字がある場合、次のように思い付きました:

>>> ' '.join([s_.replace('@', '', 1) if s_[0] in ["'", "@"] else s_ for s_ in s.split()])
"hello jon i am @here or @@there and want some@thing in 'here"

または、@が最初のn文字にある場合にのみ置換したいとします。

>>> ' '.join([s_.replace('@', '', 1) if s_.find('@') in range(2) else s_ for s_ in s.split()])
"hello jon i am @here or @@there and want some@thing in 'here"
2
Sayandip Dutta
# Python3 program to remove the @ from String


def ExceptAtTheRate(string):
    # Split the String based on the space
    arrOfStr = string.split()

    # String to store the resultant String
    res = ""

    # Traverse the words and
    # remove the first @ From every Word.
    for a in arrOfStr:
        if(a[0]=='@'):
            res += a[1:len(a)] + " "
        else:
            res += a[0:len(a)] + " "

    return res


# Driver code
string = "hello @jon i am @@here or @@@there and want some@thing in '@here"

print(ExceptAtTheRate(string))

出力:

enter image description here

1
Amar Kumar