理想结果:
我想输出
[2+ years in buy side research, 2+ years in accounting]
在下面的字符串中,该字符串是职位描述中的句子,
'2+ years in buy side research or accounting'
因此,两次比赛都重复使用2+ years in
,并在or
上进行拆分。
但是我正在写复杂的正则表达式。
当前结果:
str1 = '2+ years in buy side research or accounting'
pattern = re.compile(r'([0-9+]+ years|year)')
match_object = re.findall(pattern, str1)
=> ['2+ years']
注意:我试图以最清晰的方式写这个问题的标题,但是如果有更清晰的书写方式,我很乐意接受编辑。
答案 0 :(得分:1)
这里一种可能的方法是匹配x years in
之后所有用空格分隔的单词,然后匹配or
连词之后的任意数量的单词,一旦获得匹配,则通过附加这些单词来构建结果列表x years in
部分的单词。
注意,如果字符串在空格后的匹配模式之后包含更多单词,则可能会产生意外结果。
import re
str1 = '2+ years in buy side research or accounting'
pattern = re.compile(r'([0-9]+\+?\s*years?\s+in\s+)(\w+(?:\s+\w+)*(?:\s+or\s+\w+(?:\s+\w+)*)*)')
res = []
for m, n in re.findall(pattern, str1):
for x in re.split(r'\s+or\s+', n):
res.append("{}{}".format(m, x))
print(res) # => ['2+ years in buy side research', '2+ years in accounting']
请参见Python demo
正则表达式为
([0-9]+\+?\s*years?\s+in\s+)(\w+(?:\s+\w+)*(?:\s+or\s+\w+(?:\s+\w+)*)*)
请参见pattern demo。详细信息:
([0-9]+\+?\s*years?\s+in\s+)
-第1组:
[0-9]+
-1个以上数字\+?
-可选的+
\s*
-超过0个空格years?
-year
和可选的s
\s+
-超过1个空格in
-一个in
字\s+
-超过1个空格(\w+(?:\s+\w+)*(?:\s+or\s+\w+(?:\s+\w+)*)*)
-第2组:
\w+(?:\s+\w+)*
-1个以上的字符字符,然后0个或多个重复的1+个空格和1+个字符字符(?:\s+or\s+\w+(?:\s+\w+)*)*
-重复or
的0或多个重复,并用1+空格括起来,然后跟随上面的模式