在下文中,我想用它们的值提取键。
我编写了以下正则表达式,但它与多行中的值不匹配。正则表达式:--(.*)=.*(?=(.|--|\n|\Z)*)
--some text here not to be matched
--key1=this is a
multiline statement
statement
--random text not to be matched
--key2=val2
--key3=val3
--random text here not to be matched
所以,匹配后输出应该是
--key1=this is a
multiline statement
statement
--key2=val2
--key3=val3
答案 0 :(得分:2)
你可以试试这个:
import re
s = """
--some text here not to be matched
--key1=this is a
multiline statement
statement
--random text not to be matched
--key2=val2
--key3=val3
--random text here not to be matched
"""
new_data = re.findall('\-\-\w+\=[a-zA-Z\s\n]+', s)
for i in new_data:
print(i)
输出:
--key1=this is a
multiline statement
statement
--key2=val
--key3=val
答案 1 :(得分:1)
答案 2 :(得分:0)
也许OP提供了一个简单的例子,在实际代码中,将需要正则表达式,但上面的例子可以在没有正则表达式的情况下进行过滤
这种过滤掉垃圾行的方法的核心见解是删除所有以--
开头但不包含=
的行。
text = """--some text here not to be matched
--key1=this is a
multiline statement
statement
--random text not to be matched
--key2=val2
--key3=val3
--random text here not to be matched"""
valid_lines = [l for l in text.split('\n') if not (l.startswith('--') and '=' not in l)]
result = '\n'.join(valid_lines)
print(result)
# output
--key1=this is a
multiline statement
statement
--key2=val2
--key3=val3
从结果文本中构造字典:
mydata = {data.split('=')[0]:data.split('=')[1].strip('\n') for data in result.strip('-').split('--')}
print(mydata)
#outputs:
{'key1': 'this is a\n multiline statement\n statement', 'key2': 'val2', 'key3': 'val3'}