我需要制定一个正则表达式,只选取特定字符串的第一部分而不是第二部分。例如:
(part1) (Part2)
SAI Table
Cloth
DARA
我想只提取SAI
(即part1而不是part2)。请注意,第2行在第1部分中为空,因此它应返回空格(而不是cloth
)。相同的正则表达式必须适用于所有三种字符串。对于string2,第一部分必须返回一个空格而不是table
。两部分之间没有一定的空间长度。它各不相同。
这是我试过的正则表达式,但它只适用于string1和string3:
[\s]{1,}((?:[a-zA-Z)(@\-,."'',&*]+[\s]?)+)[\s]{2,}
有没有办法编写一个在这种情况下有用的正则表达式?
我只能在这里使用正则表达式,因为我需要它来返回那里存在的任何字符串。字符串可以是字母数字,可能包含我之前的正则表达式中最常用的符号。两者之间的空间永远不会固定。
我还需要它在第1部分中返回一个空的空格。我们可以忽略第2部分。但是我必须确保正则表达式与第2部分不匹配。
答案 0 :(得分:1)
如果第一列( part1 )始终后跟2个空格,而第二列( part2 )不是,则可以依赖在这种情况下,以防止在最后一列中匹配。我们可以使用lookahead (?=[\t ]{2})
断言2个连续的空格或制表符。
<强>代码强>
import re
patt = r'^[\t ]*(\S+(?:[\t ]\S+)*(?=[\t ]{2})| )'
str = r'''
(part1) (Part2)
SAI Table
Cloth
DARA
'''
print re.findall(patt, str, re.MULTILINE)
<强>输出强>
['(part1)', 'SAI', ' ', 'DARA']
您也可以将\S
更改为[a-zA-Z)(@\-,."'',&*]
以限制允许的字符。
答案 1 :(得分:0)