我有以下消息:
msg = "Cowlishaw Street & Athllon Drive, Greenway now free of obstruction."
我想将“ Drive”更改为“ Dr”或将“ Street”更改为“ St”
expected_msg = "Cowlishaw St and Athllon Dr Greenway now free of obstruction"
我也有一个“转换功能”
如果有这样的单词,我该如何检查列表。如果是这样,请使用“转换”功能对其进行更改。“转换”是具有单词(例如“ Drive”)作为键的字典,值是“ Dr”
这就是我所做的
def convert_message(msg, conversion):
msg = msg.translate({ord(i): None for i in ".,"})
tokens = msg.strip().split(" ")
for x in msg:
if x in keys (conversion):
return " ".join(tokens)
这不是简单的:
translations = {'Drive': 'Dr'}
for index, token in enumerate(tokens):
if token in conversion:
tokens[index] = conversion[token]
return ' '.join(tokens)
但是,这不适用于像这样"Obstruction on Cowlishaw Street."
的句子,因为令牌现在是Street.
。也许您应该使用带有以下内容的正则表达式re.sub
:
import re
def convert_message(msg, conversion):
def translate(match):
word = match.group(0)
if word in conversion:
return conversion[word]
return word
return re.sub(r'\w+', translate, msg)
在这里re.sub
找到1个或多个连续的(+
)字母数字字符(\w
);并且对于每个这样的正则表达式match调用给定的函数,将匹配项作为参数;匹配的单词可以使用检索match.group(0)
。该函数应返回给定匹配项的替换项-在此,如果在字典中找到了该单词,则返回该单词,否则返回原始单词。
因此:
>>> msg = "Cowlishaw Street & Athllon Drive, Greenway now free of obstruction."
>>> convert_message(msg, {'Drive': 'Dr', 'Street': 'St'})
'Cowlishaw St & Athllon Dr, Greenway now free of obstruction.'
至于&
,在Python 3.4+上,您应该使用它html.unescape
来解码HTML实体:
>>> import html
>>> html.unescape('Cowlishaw Street & Athllon Drive, Greenway now free of obstruction.')
'Cowlishaw Street & Athllon Drive, Greenway now free of obstruction.'
这将照顾所有已知的HTML实体。对于较旧的python版本,您可以在此问题上找到替代方法。
正则表达式与&
字符不匹配;如果您也想替换它,我们可以使用正则表达式\w+|.
,它表示:“任何连续的字母数字字符运行,或者随后的任何单个字符(不在此运行中)”:
import re
import html
def convert_message(msg, conversion):
msg = html.unescape(msg)
def translate(match):
word = match.group(0)
if word in conversion:
return conversion[word]
return word
return re.sub(r'\w+|.', translate, msg)
那你可以做
>>> msg = 'Cowlishaw Street & Athllon Drive, Greenway now free of obstruction.'
>>> convert_message(msg, {'Drive': 'Dr', '&': 'and',
'Street': 'St', '.': '', ',': ''})
'Cowlishaw St and Athllon Dr Greenway now free of obstruction'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句