python - 为因大小写而异的相邻字母而努力使用正则表达式
问题描述
我希望能够递归地删除字符串中仅在它们的情况下不同的相邻字母,例如如果 s = AaBbccDd 我希望能够删除 Aa Bb Dd 但保留 cc。
我可以使用列表递归地执行此操作:
我认为可以使用正则表达式来完成,但我正在努力:
使用测试字符串“fffAaaABbe”,答案应该是“fffe”,但我使用的正则表达式给出了“fe”
def test(line):
res = re.compile(r'(.)\1{1}', re.IGNORECASE)
#print(res.search(line))
while res.search(line):
line = res.sub('', line, 1)
print(line)
工作方式是:
def test(line):
result =''
chr = list(line)
cnt = 0
i = len(chr) - 1
while i > 0:
if ord(chr[i]) == ord(chr[i - 1]) + 32 or ord(chr[i]) == ord(chr[i - 1]) - 32:
cnt += 1
chr.pop(i)
chr.pop(i - 1)
i -= 2
else:
i -= 1
if cnt > 0: # until we can't find any duplicates.
return test(''.join(chr))
result = ''.join(chr)
print(result)
是否可以使用正则表达式来做到这一点?
解决方案
re.IGNORECASE
不是解决这个问题的方法,因为它会以同样的方式处理aa
, Aa
, aA
, AA
。从技术上讲,可以使用re.sub
, 以下方式。
import re
txt = 'fffAaaABbe'
after_sub = re.sub(r'Aa|aA|Bb|bB|Cc|cC|Dd|dD|Ee|eE|Ff|fF|Gg|gG|Hh|hH|Ii|iI|Jj|jJ|Kk|kK|Ll|lL|Mm|mM|Nn|nN|Oo|oO|Pp|pP|Qq|qQ|Rr|rR|Ss|sS|Tt|tT|Uu|uU|Vv|vV|Ww|wW|Xx|xX|Yy|yY|Zz|zZ', '', txt)
print(after_sub) # fffe
请注意,我明确定义了所有可能的字母对,因为到目前为止我知道没有办法只使用re
模式来说“反转大小写字母”。也许其他用户将能够提供更简洁re
的解决方案。
推荐阅读
- python - Django createsuperuser 抛出 django.core.exceptions.FieldDoesNotExist: User has no field named ' ' 错误
- python - RuntimeError:输入必须有 2 维,得到 3
- c++ - 如果我得到一个用 & 符号传递的变量的引用,会发生什么?
- c# - WPF - 隐藏 ItemControl -> UniformGrid 中的项目,以免占用基于数据绑定的 UI 空间
- python - Python连接多个文件,每个文件最多有一定的行数
- android - 获取数据函数内部的获取数据函数,Firestore
- node.js - 如何在单独的 javascript 文件中访问从我的 sql 创建的值?json是选项之一吗?
- python - 在 Python 中解析 Salesforce.com XML 消息
- python - Dijkstra 算法的多个输入
- r - R 的 group_by->filter->summarise 在 pandas 中的等效项以进行快速原型设计?