带字符串的正则表达式:出现两次的字母对[关闭]
Posted
技术标签:
【中文标题】带字符串的正则表达式:出现两次的字母对[关闭]【英文标题】:Regex with strings: pairs of letters that occur twice [closed] 【发布时间】:2016-03-27 02:49:21 【问题描述】:如何在 Python 中使用正则表达式找到在字符串中出现两次的字母对?
我想遍历一个字符串列表,找到具有重复字母对的字符串,并将它们放入一个列表中。字母不必相同,只需重复,尽管字母可以相同。
例如:
xxhgfhdeifhjfrikfoixx
- 这个有两次xx
所以我想保留这个字符串
kwofhdbugktrkdidhdnbk
- 这个也可以保留,因为 hd
重复了
我得到的最好的结果是找到这些对:([a-z][a-z])\1|([a-z])\2
我需要找出哪些字符串有重复的对。
【问题讨论】:
使标题更能描述您的问题。并且正则表达式总是适用于字符串。 也许,(\w2).*?\1
这很接近,据我所知。但我的意思是任何至少出现两次的对。所以 hb 或 aa,任何东西,只要这对重复。我应该更清楚这一点。
好的,更新问题以添加更多详细信息、输入字符串、预期输出和您的尝试
什么口味的正则表达式?什么语言?你试过什么?
【参考方案1】:
正则表达式
(\w2).*?(\1)
https://regex101.com/r/yB3nX6/1
可视化
代码
遍历所有匹配项
for match in re.finditer(r"(\w2).*?(\1)", subject, re.IGNORECASE):
# match start: match.start()
# match end (exclusive): match.end()
# matched text: match.group()
获取字符串中所有正则表达式匹配的数组
result = re.findall(r"(\w2).*?(\1)", subject, re.IGNORECASE)
人类可读
# (\w2).*?(\1)
#
# Options: Case insensitive; Exact spacing; Dot doesn’t match line breaks; ^$ don’t match at line breaks; Regex syntax only
#
# Match the regex below and capture its match into backreference number 1 «(\w2)»
# Match a single character that is a “word character” (Unicode; any letter or ideograph, any number, underscore) «\w2»
# Exactly 2 times «2»
# Match any single character that is NOT a line break character (line feed) «.*?»
# Between zero and unlimited times, as few times as possible, expanding as needed (lazy) «*?»
# Match the regex below and capture its match into backreference number 2 «(\1)»
# Match the same text that was most recently matched by capturing group number 1 (case insensitive; fail if the group did not participate in the match so far) «\1»
注意事项
如果您想明确只接受a-z
字符,可以将\w
切换为[a-z]
。
【讨论】:
以上是关于带字符串的正则表达式:出现两次的字母对[关闭]的主要内容,如果未能解决你的问题,请参考以下文章