J'ai un dataframe qui ressemble à ci-dessous

df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
           'B': ['a is host 0itdsiekivnme0itdxm', 'mmm pc is host sesoltsm09sds', 'winter on is host sesdfdfdf9', 'd is host SESCPIWM1344 sdfds asd', 'check my host sesdfdsm1dsdd0 friendly']})

J'essaie de trouver le mot après "hôte" et de remplacer les deux premiers caractères par xx

Comme ci-dessous

df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
               'B': ['a is host xxtdsiekivnme0itdxm', 'mmm pc is host xxsoltsm09sds', 'winter on is host xxsdfdfdf9', 'd is host xxSCPIWM1344 sdfds asd', 'check my host xxsdfdsm1dsdd0 friendly']})

J'ai essayé de suivre mais ça ne marche pas

df['spc3'] = df['B'].str.replace('(?<=host)(\w{2})', r'\1xx')
1
Vikram Karthic 21 mars 2021 à 10:36

2 réponses

Meilleure réponse

Votre regex est presque là, mais vous devez modifier votre groupe de capture en (\s+) afin de ne capturer que les espaces après host.

Laissez \w{2} en dehors des parenthèses de capture -- si vous mettez \w{2} à l'intérieur des parenthèses, vous incluez ces 2 caractères dans le groupe de capture, puis vous les replacez dans \1.

df['B'].str.replace('(?<=host)(\s+)\w{2}', r'\1xx')
                              ^^^^^

#    A  B
# 0  0  a is host xxtdsiekivnme0itdxm
# 1  1  mmm pc is host xxsoltsm09sds
# 2  2  winter on is host xxsdfdfdf9
# 3  3  d is host xxSCPIWM1344 sdfds asd
# 4  4  check my host xxsdfdsm1dsdd0 friendly
1
tdy 21 mars 2021 à 08:29

Cela fonctionnera si le mot après "hôte" vient après un seul espace.

df['spc3'] = df['B'].str.replace('(?<=host )\w{2}', 'xx')

Production:

   A  ...                                   spc3
0  0  ...          a is host xxtdsiekivnme0itdxm
1  1  ...           mmm pc is host xxsoltsm09sds
2  2  ...           winter on is host xxsdfdfdf9
3  3  ...       d is host xxSCPIWM1344 sdfds asd
4  4  ...  check my host xxsdfdsm1dsdd0 friendly

si le mot après « hôte » vient après un seul espace. Si ce n'est pas le cas, faites-le moi savoir.

1
Rishabh Kumar 21 mars 2021 à 08:01