对正则表达式相当陌生,需要有人给我指出正确的方向。我正在用Python编写一个程序,它从指定的用户输入中找到一个子字符串,并将该子字符串替换为用户指定的另一个字符串。我使用pandas来处理excel文件和python的re
模块,它与Perl有类似的匹配。
我正在处理的文件看起来像这样:
| 服务|联系方式| Address |
| --|--| ------------ |
| 1|库克街100号| 100 Cook Street |
| 3|库克大街101号| 101 Cook ave |
| 1|库克大道102号| 102 Cook Dr |
| 1|库克苑103号| 103 Cook Court |
| 2| 104 Cook cir| 104 Cook cir |
| 2|库克大道105号| 105 Cook drive |
在地址列中,应将值标准化为100 COOK ST、101 COOK AVE、102 COOK DR、103 COOK CT等。每种街道类型(街道、大道、车道)都应缩写。
下面是reformat函数的代码:
def reformat(find, format_to):
count = 0
for i, row in df.iterrows():
cell_value = df.at[i, column_header]
#update find with regex expression
#try an exp that will partition string and match substring at end of string
if cell_value == re.search(r'\w+$', find):
cell_value = str(re.search(format_to)
count += 1
else:
print("No matches found...\nReturning to search...")
__main__()
df.at[i, column_header] = cell_value
变量find
和format_to
来自用户输入(在第一提供的示例中,st/str/stree/等)。将是find
,ST将是format_to
)。
我很难找到一个只匹配街道类型(st、rd、ave等)并只将匹配的子字符串替换为format_to
的正则表达式。r'\w+$'
不会识别我抛出的任何子字符串。我还需要一个正则表达式来初始赋值cell_value
和将更新后的值赋值给cell_value
,但还没有找到任何可行的方法。我假设初始化中的正则表达式可能与布尔语句中的正则表达式相同。
我查阅了Python的re文档和Overflow的Regex Wiki,但没有发现任何看起来可行的东西。这可能是由于缺乏理解/经验。
2条答案
按热度按时间7uhlpewt1#
我不完全理解
find
是如何格式化的,但如果它是字符串"st/str/stree"
,这可能会奏效:创建的正则表达式
reg = r'(st|str|stree)$'
匹配st
、str
等之一。字符串的结尾是$
。7y4bm7vi2#
我会使用一个单词字典来替换并创建一个正则表达式,然后将其传递给
str.replace
并使用字典来Map替换:输出:
regex demo