所以这是我到目前为止的正则表达式。
r"(?s)(?<=([A-G][1-3])).*?(?=[A-G][1-3]|$)"
看起来后面跟着A-G和1-3之间的数字以及展望未来的数字。我已使用Regex101对其进行了测试。 Here's what it returns for each match
这是我正在测试的字符串,
"A1 **ACBFEKJRQ0Z+-** F2 **.,12STLMGHD** F1 **9)(** D2 **!?56WXP** C1 **IONVU43\"\'** E1 **Y87><** A3 **-=.,\'\"!?><()@**"
(字符串不应该有任何空格,但我需要在每个字母之后加上一个数字后面跟一个数字,以便更容易看到我想要的内容)
我想要它做的是将值存储在组的每个匹配项之间(&#34;完全匹配&#34;)以及它们重合的组的匹配项以便稍后使用。
最后,我想以元组列表或字典结束,例如:
dict = {"A1":"ACBFEKJRQ0Z+-", "F2":",12STLMGHD", "F1":"9)(", "next group match":"characters that follow"}
或
list_of_tuples = (["A1","ACBFEKJRQ0Z+-"], ["F2","12STLMGHD"], ["F1","9)("], ["next group match","characters that follow"])
与RegEx相比较的字符串不会像&#34; C1F2&#34;顺便说一句
P.S。请原谅可怕的解释,非常感谢任何帮助
答案 0 :(得分:1)
我建议
(?s)([A-G][1-3])((?:(?![A-G][1-3]).)*)
请参阅regex demo
(?s)
将.
匹配换行符,([A-G][1-3])
会将大写字母+数字捕获到第1组,((?:(?![A-G][1-3]).)*)
将匹配所有未启动的文本大写字母+数字序列。
可以将同一个正则表达式展开为([A-G][1-3])([^A-G]*(?:[A-G](?![1-3])[^A-G]*)*)
以获得更好的效果(不需要re.DOTALL
修饰符或(?s)
)。请参阅this demo。
import re
regex = r"(?s)([A-G][1-3])((?:(?![A-G][1-3]).)*)"
test_str = """A1 ACBFEKJRQ0Z+-F2.,12STLMGHDF19)(D2!?56WXPC1IONVU43"'E1Y87><A3-=.,'"!?><()@"""
dct = dict(re.findall(regex, test_str))
print(dct)