具有等号和换行符的字符串的正则表达式

时间:2017-03-10 19:09:17

标签: python regex

我有一个如下文件:(每条记录都在自己的行中,每行以一个标签开头)

    one = somethinghere.maybehere
    two = 3449445949
    three = anotherhere.maybehere
    four = 443
    five = anotherhere.maybehere
    six = 43439

我打算写一个正则表达式来获取等号之后的所有内容,例如获取somethinghere.maybehere3449445949

我为每一行写了一个正则表达式:

'one\s=\s([^"]+)' 
'two\s=\s([^"]+)' 

问题是它也会返回所有其他行,并且无法检测换行符。

然后我尝试了这个,但它无法匹敌!

'one\s=\s([^"]+)$\n' 
'two\s=\s([^"]+)$\n' 

你能告诉我这是什么问题吗?

3 个答案:

答案 0 :(得分:1)

假设您有充分的理由每行编写1个正则表达式,请修改您的正则表达式:

_.setUserInfo("sandeep", "sharma");

这会将换行符添加到不匹配的列表中(以及one\s=\s([^"\n]+) 字符)。

This matches only

"

并将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