让我们说我有这些字符串:
this_string = 'US/Canada'
that_string = '/fowardslash @/t t/'
我希望能够re.sub()
达到以下两个目标的字符串:
1)将所有在其前后没有字母的/
都替换为''
。
2)用空格替换具有字母的所有/
。
所以我最终想要得到的是这样的东西:
this_string = 'US Canada'
that_string = 'forwardslash @t t'
我目前有这个re.sub('[^A-Za-z0-9\s]+','', this_string)
这是第一个目标,而不是第二个。
我会得到this_string = 'USCanada'
答案 0 :(得分:1)
您可以将re.sub('\/', ' ', this_string)
用于第二个目标,\
会转义/
字符并得到所需的结果。
但是我不认为是否有可能在两种不同的情况下使用相同的模式,您可以一起使用模式来实现您想要的
答案 1 :(得分:1)
您可以将re.sub()与自己的替换功能配合使用。
示例:
import re
this_string = 'US/Canada'
that_string = '/fowardslash @/t t/'
def myreplace(match):
if match.group(1) is not None and match.group(2) is not None:
return match.group(1) + ' ' + match.group(2)
else:
return ''
print(re.sub(r'(?:([A-Za-z0-9]+)/([A-Za-z0-9]+))|(/)', myreplace, this_string))
print(re.sub(r'(?:([A-Za-z0-9]+)/([A-Za-z0-9]+))|(/)', myreplace, that_string))
答案 2 :(得分:0)
也许反过来?
text = re.sub(r'\b/\b' , ' ' , text) # Replace with space
text = re.sub(r'/' , '' , text) # Remove
或者:
text = re.sub(r'/', '', re.sub(r'\b/\b', ' ', text))
答案 3 :(得分:0)
您可以使用
import re
s = '''US/Canada
/fowardslash @/t t/'''
rx = r'(?<=[^\W\d_])/(?=[^\W\d_])|(/)'
print(re.sub(rx, lambda m: '' if m.group(1) else ' ', s))
# => US Canada
# fowardslash @t t
正则表达式匹配
(?<=[^\W\d_])/(?=[^\W\d_])
-用任何Unicode字母包围的-
|
-或(/)
-(捕获组1)在任何其他情况下的/
字符。如果组1不为空,则如果匹配,则删除匹配项,否则,将其替换为空格。