[python] 모든 단어에서 처음 나타나는 문자를 바꾸려면 어떻게해야합니까?

모든 단어에서 처음 나타나는 문자를 바꾸려면 어떻게해야합니까?

이 문자열이 있다고 가정 해보십시오.

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

그리고 @모든 단어 에서 첫 번째 단어 를 제거하여 다음과 같은 최종 문자열을 갖습니다.

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

명확하게하기 위해 “@”문자는 항상 모든 단어에 함께 표시되지만 단어의 시작 부분이나 다른 문자 사이에있을 수 있습니다.

“@”문자 가 한 번 발생할 때 Delete 하위 문자열 에서 찾은 정규 표현식의 변형을 사용하여 한 번만 발생하면 python 에서 행이 두 번이 아닌 “@”문자를 제거 했습니다 .

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

출력을보십시오 :

>>> 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('@@', '@')“@”가 다시 발생 하는 위치 에서 제거하면 쉽게 수행 할 수 있습니다.

그러나 나는 한 번 에이 교체를 수행 할 수있는 방법이 있습니까?



답변

다음 패턴에서 정규식 교체를 수행합니다.

@(@*)

그런 다음 첫 번째 캡처 그룹으로 바꾸십시오. 첫 번째 캡처 그룹은 모두 연속적인 @ 기호에서 1을 뺀 것입니다.

이것은 @문자열의 시작, 중간 또는 끝에서 해당 단어가 될 때마다 각 단어의 시작 부분에서 발생하는 모든 항목을 캡처해야 합니다.

inp = "hello @jon i am @@here or @@@there and want some@thing in '@here"
out = re.sub(r"@(@*)", '\\1', inp)
print(out)

인쇄합니다 :

hello jon i am @here or @@there and want something in 'here


답변

replace('@', '', 1)제너레이터 표현식에서 사용 하는 것은 어떻습니까?

string = 'hello @jon i am @@here or @@@there and want some@thing in "@here"'
result = ' '.join(s.replace('@', '', 1) for s in string.split(' '))

# output: hello jon i am @here or @@there and want something in "here"

int 값은 1선택적 count인수입니다.

str.replace(old, new[, count])

모든 하위 문자열 oldnew 로 교체 문자열의 복사본을 반환합니다 . 선택적 인수
개수 가 제공되면 첫 번째 개수 만 교체됩니다.


답변

다음 re.sub과 같이 사용할 수 있습니다 :

import re

s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
s = re.sub('@(\w)', r'\1', s)
print(s)

결과는 다음과 같습니다.

"hello jon i am @here or @@there and want something in 'here"

그리고 여기에 개념 증명이 있습니다 :

>>> import re
>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub('@(\w)', r'\1', s)
"hello jon i am @here or @@there and want something in 'here"
>>> 


답변

마지막 문자 만 있고 @그것을 제거하고 싶지 않거나 특정 허용되는 시작 문자가있는 경우 다음을 생각해보십시오.

>>> ' '.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"


답변

데모

(?<!@)@

당신은 이것을 시도 할 수 있습니다. 데모를 참조하십시오.


답변

# 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))

산출:

여기에 이미지 설명을 입력하십시오


답변