我正在使用 Python 中的正则表达式来处理以下数据。
Random
0 helloooo
1 hahaha
2 kebab
3 shsh
4 title
5 miss
6 were
7 laptop
8 welcome
9 pencil
我想删除具有重复字母模式(例如blaaaa)的话,重复对字母(例如哈哈哈),并且具有围绕一个字母相同的相邻字母的任意单词(例如山雀乐,柯BAB,瓦特ERE)。
这是代码:
import pandas as pd
data = {'Random' : ['helloooo', 'hahaha', 'kebab', 'shsh', 'title', 'miss', 'were', 'laptop', 'welcome', 'pencil']}
df = pd.DataFrame(data)
df = df.loc[~df.agg(lambda x: x.str.contains(r"([a-z])+\1{1,}\b"), axis=1).any(1)].reset_index(drop=True)
print(df)
以下是带有警告消息的上述输出:
UserWarning: This pattern has match groups. To actually get the groups, use str.extract.
Random
0 hahaha
1 kebab
2 shsh
3 title
4 were
5 laptop
6 welcome
7 pencil
但是,我希望看到这一点:
Random
0 laptop
1 welcome
2 pencil
您可以Series.str.contains
直接使用创建掩码并在之前禁用用户警告并在之后启用它:
import pandas as pd
import warnings
data = {'Random' : ['helloooo', 'hahaha', 'kebab', 'shsh', 'title', 'miss', 'were', 'laptop', 'welcome', 'pencil']}
df = pd.DataFrame(data)
warnings.filterwarnings("ignore", 'This pattern has match groups') # Disable the warning
df['Random'] = df['Random'][~df['Random'].str.contains(r"([a-z]+)[a-z]?\1")]
warnings.filterwarnings("always", 'This pattern has match groups') # Enable the warning
输出:
>>> df['Random'][~df['Random'].str.contains(r"([a-z]+)[a-z]?\1")]
# =>
7 laptop
8 welcome
9 pencil
Name: Random, dtype: object
您拥有的正则表达式包含一个问题:量词位于组之外,并且\1
正在寻找错误的重复字符串。此外,\b
词边界是多余的。该([a-z]+)[a-z]?\1
模式匹配一个或多个字母,然后是任意一个可选字母,以及紧跟其后的相同子串。
请参阅正则表达式演示。
我们可以安全地禁用用户警告,因为我们在这里故意使用捕获组,因为我们需要在此正则表达式模式中使用反向引用。警告需要重新启用,以避免在我们代码的其他部分不需要使用捕获组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句