regex - 如何在pyspark中移动句子中的单词位置
问题描述
我有以下街道地址:
- KR 71D 6 94 SUR LC 1709
- KR 24B 15 20 SUR AP 301
- KR 72F 39 42 SUR
- KR 72F SUR 39 42
- KR 72 SUR 39 42
我需要的是检测仅位于地址板之后的 SUR 一词,将其删除,然后在主地址之后设置。例如:
- KR 71D 6 94 SUR LC 1709 <-- Change it to: KR 71D SUR 6 94 LC 1709
- KR 24B 15 20 SUR AP 301 <-- Change it to: KR 24B SUR 15 20 AP 301
- KR 72F 39 42 SUR <-- Change it to: KR 72F SUR 39 42
- KR 72F SUR 39 42 <-- It is ok, leave it this way
- KR 72 SUR 39 42 <-- It is ok, leave it this way
非常感谢,我希望有人可以帮助我。
解决方案
你可以试试这个:
import re
lyst = ["KR 71D 6 94 SUR LC 1709","KR 24B 15 20 SUR AP 301","KR 72F 39 42 SUR","KR 72F SUR 39 42","KR 72 SUR 39 42"]
comp = re.compile(r'([a-zA-Z]+)(\s)(\w+)\s(\d+)\s(\d+)\s([a-zA-Z]+)(.*)$')
逻辑:
使用括号中捕获匹配的逻辑,您可以捕获所有以空格分隔的单词(包括数字和单词)的匹配,对于SUR的匹配,我们需要匹配第五个单词并插入到第三个位置。因此,我们在 \6 中捕获它(大于 5,因为我们也匹配一个空格)。在这场比赛之后,使用 (.*) 选择单场比赛中的所有其他内容。我们在这里使用sub
re 模块。对于最后两个字符串,因为模式永远不会通过,因此没有任何内容被替换,字符串将保持原样。
newlyst = []
for items in lyst:
newlyst.append(re.sub(comp, r'\1\2\3\2\6\2\4\2\5\7', items))
您可以打印newlyst
以查看输出:
输出:
['KR 71D SUR 6 94 LC 1709', 'KR 24B SUR 15 20 AP 301', 'KR 72F SUR 39 42', 'KR 72F SUR 39 42', 'KR 72 SUR 39 42']
推荐阅读
- node.js - 如果没有,请检查现有数据然后创建 mongodb 和 monggose
- android - Appium Studio 没有最新的 Appium 服务器
- c# - 如何在“列表”中上传一系列数据导致无效值
- android - 有没有一种方法可以从 android studio 中的 firebase firestore 的时间戳对象中提取日期和时间
- openstack - 使用 python openstacksdk、python novaclient、python cinderclient 显示卷详细信息
- flutter - 简单变量能持续多久?
- html - 改变某个页面的宽度(对源代码没有影响)
- php - 将文章插入数据库时遇到问题 Laravel 8
- ios - 有没有办法在 Swift 中弃用或隐藏系统框架 API?
- wordpress - 是否可以使用 Google Translate API 或其他工具在 wordpress 中翻译实时提要?