모든 단어에서 처음 나타나는 문자를 바꾸려면 어떻게해야합니까?
이 문자열이 있다고 가정 해보십시오.
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])
모든 하위 문자열 old 가 new 로 교체 된 문자열의 복사본을 반환합니다 . 선택적 인수
개수 가 제공되면 첫 번째 개수 만 교체됩니다.
답변
다음 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))
산출: