python - 基于条件的子字符串替换-python

标签 python regex

我有一个数据框,其中有一列包含字符串(句子)。该字符串有许多驼峰式缩写。还有另一本词典包含这些缩写词及其各自的长形式的详细信息。

例如: 字典: {'ShFrm':'Shortform', 'LgFrm':'Longform' ,'Auto':'Automatik'} 数据框列具有如下文本:(为简单起见,每个列表条目是数据框中的一行) ['ShFrmLgFrm 应自动替换','Auto', 'AutoLgFrm']

如果我只是使用字典进行替换,则所有替换都是正确的,除了第一个文本中的“自动转换为“自动””之外。

我尝试在带有条件的字典的键值中使用正则表达式,仅当前面有空格/开头的 pf 字符串/小字母和后面有大写字母/空格/句子结尾时才替换单词:'( ?:^|[a-z])ShFrm(?:[^A-Z]|$)',但它也会替换中间字符串之前和之后的字符。

您能否帮我修改正则表达式模式,使其仅在前面有小写字母/前面有单词开头/空格并且后面有大写字母/后面有单词结尾/空格时才匹配缩写仅替换中间的单词,而不替换前后字符

最佳答案

您需要根据字典键构建基于交替的正则表达式,并使用 lambda 表达式作为替换参数。

查看以下Python demo :

import re
d = {'ShFrm':'Shortform', 'LgFrm':'Longform' ,'Auto':'Automatik'}
col = ['ShFrmLgFrm should be replaced Automatically','Auto', 'AutoLgFrm']
rx = r'(?:\b|(?<=[a-z]))(?:{})(?=[A-Z]|\b)'.format("|".join(d.keys()))
# => (?:\b|(?<=[a-z]))(?:ShFrm|LgFrm|Auto)(?=[A-Z]|\b)
print([re.sub(rx, lambda x: d[x.group()], v) for v in col])
# => ['ShortformLongform should be replaced Automatically', 'Automatik', 'AutomatikLongform']

在 Pandas 中,你可以像这样使用它:

df[col] = df[col].str.replace(rx, lambda x: d[x.group()], regex=True)

请参阅regex demo .

关于python - 基于条件的子字符串替换-python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70243250/

相关文章:

python - 使用 Python 的 WebRTC

python - 使用传输编码 Python 时出现 502 Bad gateway

python - 如何通过在 Bokeh 中使用 Select 小部件设置源来更新绘图

javascript - 尝试定位父元素子 JQuery

c++ - 使用正则表达式解析字符串

python - Python elasticsearch仅返回具有特定字段的条目

python - keras中张量之间的划分

javascript - 用 jQuery/JavaScript 替换 , 的最后一个索引

java - 正则表达式正则表达式Java字符串

java - Java 中允许空格字符的正则表达式