Regex 如何在特殊字符和第二个字符的第一个匹配之间找到正则表达式匹配?

Regex 如何在特殊字符和第二个字符的第一个匹配之间找到正则表达式匹配?,regex,python-3.x,string,pandas,Regex,Python 3.x,String,Pandas,在pandasdf的一列中,我有一些值,比如Elgin(west/ouest)(123/456),Ont,Canada和west/ouest,Ont,Canada,我想把它们转换成Elgin(west)(123),Ont,Canada和west,Ont,加拿大删除/和之间或/和,之间的所有字符 我的代码: df_census1901['LOC2'] = df_census1901['LOC'].str.replace(r'/.*\)', ')') df_census1901['LOC2'] =

在pandas
df
的一列中,我有一些值,比如
Elgin(west/ouest)(123/456),Ont,Canada
west/ouest,Ont,Canada
,我想把它们转换成
Elgin(west)(123),Ont,Canada
west,Ont,加拿大
删除
/
之间或
/
之间的所有字符

我的代码:

df_census1901['LOC2'] = df_census1901['LOC'].str.replace(r'/.*\)', ')')
df_census1901['LOC2'] = df_census1901['LOC2'].str.replace(r'/.*\,', ',')

问题是它会贪婪地切入加拿大安大略省埃尔金(西部)

在这种情况下,您通常有两种选择:

  • 使用惰性量词
    *?
    (或
    +?
    )避免匹配过多:
    “/.*?\”
  • 使用否定的范围到结束字符的所有内容: (这种方法更具体,通常更快)

如果在
/
之后有字母数字值,直到
为止,则可以将它们与
\w*
匹配,例如:

print (df_census1901['LOC'].str.replace(r'/\w*', ''))
0    Elgin (west) (123), Ont, Canada
1                  West, Ont, Canada
Name: LOC, dtype: object

*?
使它变得懒惰(非贪婪),这在每次测试时都适用于您的两个场景