我有一些字符串(实际上它们是从文件中读取的行)。这些行只是复制到其他文件中,但其中一些是"特殊的"需要不同的待遇。
这些行具有以下语法:
someText[SUBSTRING1=SUBSTRING2]someMoreText
所以,我想要的是:当我有一条线,这个"掩盖"可以应用,我想将SUBSTRING1
和SUBSTRING2
存储到变量中。大括号和=
将被剥离。
我想这包括几个任务:
我确定这是一个简单的正则表达式任务,但是,我不习惯它。我可以使用字符串操作编写一个巨大的怪物函数,但我想这不是" Python方式"这样做。
对此有何建议?
答案 0 :(得分:0)
re.search()
如果找不到匹配则会返回None
。 \w
与字母数字匹配,+
表示1或更多。括号表示捕获组。
s = """
bla bla
someText[SUBSTRING1=SUBSTRING2]someMoreText"""
results = {}
for line_num, line in enumerate(s.split('\n')):
m = re.search(r'\[(\w+)=(\w+)\]', line)
if m:
results.update({line_num: {'first': m.group(0), 'second': m.group(1)}})
print(results)
答案 1 :(得分:-1)
^[^\[\]]*\[([^\]\[=]*)=([^\]\[=]*)\][^\]\[]*$
你可以试试这个。Group 1
和Group 2
有你想要的两个字符串。参见演示。
https://regex101.com/r/pT4tM5/26
import re
p = re.compile(r'^[^\[\]]*\[([^\]\[=]*)=([^\]\[=]*)\][^\]\[]*$', re.MULTILINE)
test_str = "someText[SUBSTRING1=SUBSTRING2]someMoreText\nsomeText[SUBSTRING1=SUBSTRING2someMoreText\nsomeText[SUBSTRING1=SUBSTRING2]someMoreText"
re.findall(p, test_str)