python - 替换之前出现的单词
问题描述
我想删除括号内的重复单词并将它们替换为“S”+单词。单词可以是任何东西——包括特殊字符、小数、时间段、连字符等。
例如:
(Skipper Skipper) -> (S Skipper)
('s 's) -> (S 's)
这是字符串,s
:
s = "(S (S (S (S (Skipper Skipper) ('s 's)) (Inc. Inc.)) (S (Bellevue Bellevue) (Wash. Wash.)))
(S (said said) (S (it it) (S (signed signed) (S (a a) (S (definitive definitive)
(S (merger merger) (S (agreement agreement) (S (for for) (S (S (a a)
(S (National National) (S (Pizza Pizza) (S (Corp. Corp.) (unit unit)))))
(S (to to) (S (acquire acquire) (S (S (S (the the) (S (90.6 90.6) (% %)))
(S (S (of of) (S (S (Skipper Skipper) ('s 's)) (Inc. Inc.))) (S (it it)
(S (does does) (S (n't n't) (own own)))))) (S (for for) (S (S (11.50 11.50)
(S (a a) (share share))) (S (or or) (S (about about) (S (28.1 28.1) (million million)))))))))))))))))))"
预期结果:
out = "(S (S (S (S (S Skipper) (S 's)) (S Inc.)) (S (S Bellevue) (S Wash.)))
(S (S said) (S (S it) (S (S signed) (S (S a) (S (S definitive) (S (S merger)
(S (S agreement) (S (S for) (S (S (S a) (S (S National) (S (S Pizza) (S (S Corp.)
(S unit))))) (S (S to) (S (S acquire) (S (S (S (S the) (S (S 90.6) (S %))) (S (S (S of)
(S (S (S Skipper) (S 's)) (S Inc.))) (S (S it) (S (S does) (S (S n't) (S own))))))
(S (S for) (S (S (S 11.50) (S (S a) (S share))) (S (S or) (S (S about) (S (S 28.1) (S million)))))))))))))))))))"
我试着做:
import re
def sub(matched):
return f"(S {matched.group(2)})" if matched.group(1) == matched.group(2) else str(matched.groups())
result = re.sub(r"\(([\.\%\'\w\d]+) ([\.\%\'\w\d]+)\)", sub, s)
但是我需要输入每种类型的单词(/d,/w)等。有没有一种一次性的方法来实现这一点?
解决方案
您可以使用
(?<![^\s()])([^\s()]+)(?=\s+\1(?![^\s()]))
请参阅正则表达式演示。细节:
(?<![^\s()])
- 一个否定的前瞻,它匹配一个不是紧接在前面的字符而不是空格的位置,(
以及)
([^\s()]+)
- 第 1 组:一个或多个除空格以外的字符,(
以及)
(?=\s+\1(?![^\s()]))
- 与紧随其后的位置匹配的正向前瞻\s+
- 1 个或多个空格\1
- 组 1 值(?![^\s()])
- 除了空格之外,不能有任何字符,(
并且)
紧挨当前位置的右侧。
在 Python 中,使用
re.sub(r'(?<![^\s()])([^\s()]+)(?=\s+\1(?![^\s()]))', 'S', text)
推荐阅读
- java - 将 Firestore 数据表示为列表视图
- python - 天空之星位置编号
- reactjs - React Js App 无法在 localhost:3000 上运行,但它在 localhost:8888 上运行良好(Netlify Dev)
- java - 从 Avro 模式创建 java.util.List
- spring - 无法使用存储库中添加的功能
- ssh - 我可以ssh到电话但不能到电脑
- json - 从服务器接收 JSON 数据并将其存储在数组中
- user-interface - 在空手道 UI 自动化期间,当您想检查按钮是否存在时使用哪种方法
- javascript - 按下右箭头时转到下一个图像元素
- css - 尝试将列标题与其下方的行对齐