我有一个如下文件:(每条记录都在自己的行中,每行以一个标签开头)
one = somethinghere.maybehere
two = 3449445949
three = anotherhere.maybehere
four = 443
five = anotherhere.maybehere
six = 43439
我打算写一个正则表达式来获取等号之后的所有内容,例如获取somethinghere.maybehere
或3449445949
我为每一行写了一个正则表达式:
'one\s=\s([^"]+)'
'two\s=\s([^"]+)'
问题是它也会返回所有其他行,并且无法检测换行符。
然后我尝试了这个,但它无法匹敌!
'one\s=\s([^"]+)$\n'
'two\s=\s([^"]+)$\n'
你能告诉我这是什么问题吗?
答案 0 :(得分:1)
假设您有充分的理由每行编写1个正则表达式,请修改您的正则表达式:
_.setUserInfo("sandeep", "sharma");
这会将换行符添加到不匹配的列表中(以及one\s=\s([^"\n]+)
字符)。
"
并将one = somethinghere.maybehere
捕获到捕获组1中。
话虽这么说,这是对你(大多数工作)正则表达式的最小修改,以准确回答你的问题;对于您尝试使用代码解决的较大问题,其中一个答案可能会提供更有效的解决方案!
答案 1 :(得分:0)
这将为您节省很多时间。请不要为每个人写一个正则表达式。
from re import findall
string = """one = somethinghere.maybehere
two = 3449445949
three = anotherhere.maybehere
four = 443
five = anotherhere.maybehere
six = 43439"""
myValues = dict(findall(r"\s*(.*?)\s*=\s*(.*?)\s*\n",string))
print(myValues["one"]) # prints somethinghere.maybehere
它使所有这些都非常容易访问。请参阅最后一行。
答案 2 :(得分:0)
完整的演练可能是:
import re
string = """
one = somethinghere.maybehere
two = 3449445949
three = anotherhere.maybehere
four = 443
five = anotherhere.maybehere
six = 43439
"""
rx = re.compile(r'(?P<key>\w+)\s*=\s*(?P<value>.+)')
params = {
match.group('key'):match.group('value')
for match in rx.finditer(string)
}
print(params)
# {'six': '43439', 'three': 'anotherhere.maybehere', 'two': '3449445949', 'four': '443', 'five': 'anotherhere.maybehere', 'one': 'somethinghere.maybehere'}
这使用dict理解来填充一个名为params
的新词典,同时查看working on ideone.com as on regex101.com。