Python:如何忽略句子的分隔部分?

时间:2011-06-22 15:29:57

标签: python regex

我有以下一行:

CommonSettingsMandatory = #<Import Project="[\\.]*Shared(\\vc10\\|\\)CommonSettings\.targets," />#,true

我想要以下输出:

['commonsettingsmandatory', '<Import Project="[\\\\.]*Shared(\\\\vc10\\\\|\\\\)CommonSettings\\.targets," />', 'true'

如果我使用逗号做一个简单的正则表达式,它将分割值,如果有一个值,就像我在目标之后写了一个逗号,它会在这里拆分。 所以我想忽略##之间的文本,以确保那里没有分裂。 我真的不知道该怎么做!

3 个答案:

答案 0 :(得分:0)

虽然您可以使用带有lookbehind的split,但我会使用此表达式捕获的组。

(\S+)\s*=\s*##([^#]+)##,\s*(.*)

m = re.Search(expression, myString)。使用m.group(1)作为第一个字符串,m.group(2)作为第二个字符串,等等。

答案 1 :(得分:0)

http://docs.python.org/library/re.html#re.split

import re

string = 'CommonSettingsMandatory = #toto,tata#, true'
splitlist = re.split('\s?=\s?#(.*?)#,\s?', string)

然后splitlist包含['CommonSettingsMandatory', 'toto,tata', 'true']

答案 2 :(得分:0)

如果我理解正确,你会尝试使用空格作为分隔符来拆分字符串,但是你还要删除井号之间的任何文字?

如果这是正确的,为什么不在拆分字符串之前简单地删除井号符号分隔的文本

import re
myString = re.sub(r'#.*?#', '', myString)
myArray = myString.split(' ')

编辑:(根据修订后的问题)

import re
myArray = re.findall(r'^(.*?) = #(.*?)#,(.*?)$', myString)

这将实际返回包含您的匹配的元组数组,格式为:

[
    (
        'commonsettingsmandatory',
        '<Import Project="[\\\\.]*Shared(\\\\vc10\\\\|\\\\)CommonSettings\\.targets," />',
        'true'
    )
]

(添加间距以更好地说明格式)