正则表达式匹配可选模式/字符串

时间:2018-08-06 22:42:03

标签: python regex

我有一个字符串列表,我正在尝试编写正则表达式来捕获可能包含或不包含某种特定模式的字符串组。

 any ascii character string
another string = other stuff
string = another string = string

我试图在第一次出现模式(" = ")之前和之后捕获字符串的一部分。我已经尝试过了:

\s*?([\x00-\x7F]+)( - )?(.*)?

,但是它只是将整个字符串捕获为一组。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

可以使用正则表达式解决此问题:

>>> text = '''any ascii character string
another string = other stuff
string = another string = string'''

>>> re.findall('^([^=]+?)(?: = (.*?))?$', text, re.M)
[('any ascii character string', ''),
 ('another string ', ' other stuff'),
 ('string ', ' another string = string')]

但是在这种情况下,简单的做法是先按行分割,然后按第一个等号字符对行进行分割/分割:

>>> [line.split('=', 1) for line in text.splitlines()]
[['any ascii character string'],
 ['another string ', ' other stuff'],
 ['string ', ' another string = string']]

如果您不喜欢该空格,请将其删除:

>>> [list(map(str.strip, line.split('=', 1))) for line in text.splitlines()]
[['any ascii character string'],
 ['another string', 'other stuff'],
 ['string', 'another string = string']]