Python 更正重新编译以消除句点,但为逗号添加空间

Python 更正重新编译以消除句点,但为逗号添加空间,python,python-3.x,regex,text-processing,Python,Python 3.x,Regex,Text Processing,我有几行python代码,它们遍历了一个列表并从每行中删除标点符号。代码在这里运行 import pandas as pd import re data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']] df = pd.DataFrame(data, columns = ['ID']) p = re.compile(r'[^\w\s\d]+') df['ID'] = [p.sub('',x) for x in

我有几行python代码,它们遍历了一个列表并从每行中删除标点符号。代码在这里运行

import pandas as pd
import re
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']] 
df = pd.DataFrame(data, columns = ['ID']) 
p = re.compile(r'[^\w\s\d]+')
df['ID'] = [p.sub('',x) for x in df['ID'].tolist()]
df
我面临的问题是,我需要句点和破折号(“.”,“-”)来代替空格,而逗号(“,”)可以代替空格。我无法获得正确的表达式语法。
例如,第2行给出了结果“MBBSBS”,当我需要它读取“MBBS”

时,只需在正则表达式之前进行替换:

df['ID'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用Python字符串方法并完全跳过正则表达式:

import pandas as pd
import string

repl={ord(k):'' for k in string.punctuation}
repl[ord(',')]=' '
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']] 
df = pd.DataFrame(data, columns = ['ID']) 

df['ID'] = [x.translate(repl) for x in df['ID'].tolist()]

>>> df
            ID
0         MBBS
1      MBBS BS
2    ACNP  DNP
3  ACNPBC  DNP
如果您不希望“
”,“
变成两个空格,只需在其他替换之前替换它们:

df['ID'] = [x.replace(', ',' ').translate(repl) for x in df['ID'].tolist()]

你明白了…

只需在正则表达式之前进行替换:

df['ID'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用Python字符串方法并完全跳过正则表达式:

import pandas as pd
import string

repl={ord(k):'' for k in string.punctuation}
repl[ord(',')]=' '
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']] 
df = pd.DataFrame(data, columns = ['ID']) 

df['ID'] = [x.translate(repl) for x in df['ID'].tolist()]

>>> df
            ID
0         MBBS
1      MBBS BS
2    ACNP  DNP
3  ACNPBC  DNP
如果您不希望“
”,“
变成两个空格,只需在其他替换之前替换它们:

df['ID'] = [x.replace(', ',' ').translate(repl) for x in df['ID'].tolist()]
你明白了……你可以做:

df['ID'] = df.ID.str.replace('[.-]|(,\\s*)',lambda x: ' ' if x.group(1) else '')
df
             ID
0          MBBS
1       MBBS BS
2      ACNP DNP
3    ACNPBC DNP
如果这很复杂,请执行以下操作:

 df['ID'] = df.ID.str.replace('[.-]','').str.replace(',\\s*',' ')
 df
                 ID
    0          MBBS
    1       MBBS BS
    2      ACNP DNP
    3    ACNPBC DNP
你可以做:

df['ID'] = df.ID.str.replace('[.-]|(,\\s*)',lambda x: ' ' if x.group(1) else '')
df
             ID
0          MBBS
1       MBBS BS
2      ACNP DNP
3    ACNPBC DNP
如果这很复杂,请执行以下操作:

 df['ID'] = df.ID.str.replace('[.-]','').str.replace(',\\s*',' ')
 df
                 ID
    0          MBBS
    1       MBBS BS
    2      ACNP DNP
    3    ACNPBC DNP

我很感激这个方法,因为我从未使用过。翻译,再次感谢!我很感激这个方法,因为我从未使用过。翻译,再次感谢!感谢您提供此解决方案,尽管其他评论员提供了更有用的解决方案。我也喜欢你的方法。谢谢感谢您提供此解决方案,尽管其他评论员提供了更有用的解决方案。我也喜欢你的方法。谢谢