如何用正则表达式不同地替换某些正斜杠?

时间:2019-01-22 23:28:17

标签: python regex string

让我们说我有这些字符串:

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'

4 个答案:

答案 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

请参见Python 3 demo online

正则表达式匹配

  • (?<=[^\W\d_])/(?=[^\W\d_])-用任何Unicode字母包围的-
  • |-或
  • (/)-(捕获组1)在任何其他情况下的/字符。

如果组1不为空,则如果匹配,则删除匹配项,否则,将其替换为空格。