简体   繁体   中英

Extract words after a symbol in python

I have the following data where i would like to extract out source= from the values. Is there a way to create a general regex function so that i can apply on other columns as well to extract words after equal sign?

Data                      Data2
source=book               social-media=facebook
source=book               social-media=instagram 
source=journal            social-media=facebook

Im using python and i have tried the following:

df['Data'].astype(str).str.replace(r'[a-zA-Z]\=', '', regex=True)

but it didnt work

you can try this:

df.replace(r'[a-zA-Z]+-?[a-zA-Z]+=', '', regex=True)

It gives you the following result:

      Data      Data2
0     book   facebook
1     book  instagram
2  journal   facebook

Regex is not required in this situation:

print(df['Data'].apply(lambda x : x.split('=')[-1]))
print(df['Data2'].apply(lambda x : x.split('=')[-1]))

You have to repeat the character class 1 or more times and you don't have to escape the equals sign.

What you can do is make the match a bit broader matching all characters except a whitespace char or an equals sign.

Then set the result to the new value.

import pandas as pd

data = [
    "source=book",
    "source=journal",
    "social-media=facebook",
    "social-media=instagram"
]

df = pd.DataFrame(data, columns=["Data"])
df['Data'] = df['Data'].astype(str).str.replace(r'[^\s=]+=', '', regex=True)
print(df)

Output

        Data
0       book
1    journal
2   facebook
3  instagram

If there has to be a value after the equals sign, you can also use str.extract

df['Data'] = df['Data'].astype(str).str.extract(r'[^\s=]+=([^\s=]+)')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM