如何从正则表达式匹配中获取索引?

德文塞特

我正在寻找针对我的问题的更多Python或函数式编程解决方案。

regular expression将a匹配到字符串。正则表达式在每个通配符重复周围捕获一个组。我使用这些组来掩盖比赛中的通配符。以下代码显示了一个示例:

out_str_list = []
original_str = 'XYZQUACKESTARNFSDMADESBHSCHILDABCD'
match = re.search('(?=(QUACK(.{2,4})TAR(.{2,4})MAD(.{3,5})CHILD))', original_str)   # searching while grouping repetitions of wildcards
hide_ranges = tuple(match.span(i) for i in range(2, len(match.groups()) + 1))   # ((8, 10), (13, 17), (20, 25))
match_range = match.span(1) # (3, 30)
i = 0

out_str_list.append(original_str[match.span(1)[0]:hide_ranges[0][0]])
while i < len(hide_ranges):
    out_str_list.append("-({0})-".format(hide_ranges[i][1] - hide_ranges[i][0]))
    if i == 0 and len(hide_ranges) != 1:
        out_str_list.append(original_str[hide_ranges[0][1]:hide_ranges[1][0]])
    elif i == len(hide_ranges) - 1:
        pass
    else:
        out_str_list.append(original_str[hide_ranges[i][1]:hide_ranges[i+1][0]])
    i += 1
out_str_list.append(original_str[hide_ranges[i-1][1]:match.span(1)[1]])
match_str = ''.join(out_str_list)

assert match_str = 'QUACK-(2)-TAR-(4)-MAD-(5)-CHILD'

该代码有效,但似乎比所需的更为冗长。此示例的更一般形式:

我有一个字符串: XYZQUACKESTARNFSDMADESBHSCHILDABCD

从正则表达式匹配中,生成元组: ((8, 10), (13, 17), (20, 25))

和一个具有匹配的开始和结束索引的元组: (3, 30)

我怎样才能得到一个像这样的字符串QUACK-(2)-TAR-(4)-MAD-(5)-CHILD

我想要做类似的事情str.split,并str.join({length of gap})为每一个捕捉组。我不能完全做到这一点,因为给了我索引而不是要分割的字符串。我知道函数式编程方法会使用诸如map或filter之类的方法,但是我不确定如何以所需的方式应用字符串切片。

马克西姆

您可以re.split用来提取字符串的不匹配部分,并re.findall找到字符串的匹配部分。然后,您可以遍历这些集合,并将数据汇总在一起:

import re

s = 'XYZQUACKESTARNFSDMADESBHSCHILDABCD'
matches = re.findall('QUACK|TAR|MAD|CHILD',s)
non_matches = re.split('QUACK|TAR|MAD|CHILD',s)
'-'.join(["{}-({})".format(matches[i], len(non_matches[i+1])) for i in range(len(matches))])
#'QUACK-(2)-TAR-(4)-MAD-(5)-CHILD-(4)'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从正则表达式匹配中获取范围

来自分类Dev

如何获取仅匹配和包含部分的正则表达式匹配索引?

来自分类Dev

获取熊猫数据框中的正则表达式匹配索引不起作用

来自分类Dev

在正则表达式中获取匹配字符串的索引

来自分类Dev

获取正则表达式中匹配的字符数

来自分类Dev

如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

来自分类Dev

如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

来自分类Dev

如何在正则表达式中匹配“ [”和“]”?

来自分类Dev

如何在正则表达式中匹配“ [”和“]”?

来自分类Dev

正则表达式,如何排除匹配中的搜索

来自分类Dev

如何匹配正则表达式中的单词

来自分类Dev

如何匹配正则表达式

来自分类Dev

如何在Python中获取匹配正则表达式的组名?

来自分类Dev

如何在python中获取多个正则表达式匹配?

来自分类Dev

如何获取与Aerospike中的正则表达式匹配的所有记录?

来自分类Dev

如何在PHP中获取所有正则表达式匹配项?

来自分类Dev

如何在正则表达式中获取制表符匹配

来自分类Dev

如何获取与Aerospike中的正则表达式匹配的所有记录?

来自分类Dev

如何在java正则表达式中获取`{`?

来自分类Dev

如何获取正则表达式

来自分类Dev

如何在Lua中通过正则表达式重复匹配多个表达式

来自分类Dev

如何在匹配表达式中编写正则表达式文字?

来自分类Dev

仅在正则表达式完全匹配时如何匹配正则表达式

来自分类Dev

仅匹配奇/偶索引的正则表达式

来自分类Dev

使用正则表达式匹配替换索引值

来自分类Dev

如何正则表达式匹配和正则表达式替换php中的字符串

来自分类Dev

如何使用要在反向索引中使用的正则表达式匹配Ruby中的多行字符串?

来自分类Dev

正则表达式如何在json表达式中获取组

来自分类Dev

如何搜索在字符串的某个索引之前开始的正则表达式匹配?

Related 相关文章

  1. 1

    如何从正则表达式匹配中获取范围

  2. 2

    如何获取仅匹配和包含部分的正则表达式匹配索引?

  3. 3

    获取熊猫数据框中的正则表达式匹配索引不起作用

  4. 4

    在正则表达式中获取匹配字符串的索引

  5. 5

    获取正则表达式中匹配的字符数

  6. 6

    如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

  7. 7

    如何在PostgreSQL中的字符串中获取正则表达式匹配的位置?

  8. 8

    如何在正则表达式中匹配“ [”和“]”?

  9. 9

    如何在正则表达式中匹配“ [”和“]”?

  10. 10

    正则表达式,如何排除匹配中的搜索

  11. 11

    如何匹配正则表达式中的单词

  12. 12

    如何匹配正则表达式

  13. 13

    如何在Python中获取匹配正则表达式的组名?

  14. 14

    如何在python中获取多个正则表达式匹配?

  15. 15

    如何获取与Aerospike中的正则表达式匹配的所有记录?

  16. 16

    如何在PHP中获取所有正则表达式匹配项?

  17. 17

    如何在正则表达式中获取制表符匹配

  18. 18

    如何获取与Aerospike中的正则表达式匹配的所有记录?

  19. 19

    如何在java正则表达式中获取`{`?

  20. 20

    如何获取正则表达式

  21. 21

    如何在Lua中通过正则表达式重复匹配多个表达式

  22. 22

    如何在匹配表达式中编写正则表达式文字?

  23. 23

    仅在正则表达式完全匹配时如何匹配正则表达式

  24. 24

    仅匹配奇/偶索引的正则表达式

  25. 25

    使用正则表达式匹配替换索引值

  26. 26

    如何正则表达式匹配和正则表达式替换php中的字符串

  27. 27

    如何使用要在反向索引中使用的正则表达式匹配Ruby中的多行字符串?

  28. 28

    正则表达式如何在json表达式中获取组

  29. 29

    如何搜索在字符串的某个索引之前开始的正则表达式匹配?

热门标签

归档