我有一个如下的表达:
^f04[^z]*$ ^f00bar$,^.*f04.*&~(.*z.*)$ AND foo bar OR f04ba
所以,我想做的是:
如果两个连续的单词或regex形式的单词之间用空格隔开,则将该空格改为word,如果用(逗号)隔开,则改为word,如果用AND隔开,则保持原样。你知道吗
所以,现在应该是这样的:
^f04[^z]*$ AND ^f00bar$ OR ^.*f04.*&~(.*z.*)$ AND foo AND bar OR f04ba
最后,如果这两个词之间用分隔符隔开,我想在它周围加一个括号,它看起来如下:
(^f04[^z]*$ AND ^f00bar$) OR (^.*f04.*&~(.*z.*)$ AND foo AND bar) OR f04ba
另一个例子:
1.)foo bar OR cat AND crap,flu
->;(foo AND bar) OR (cat AND CRAP) OR flu
2.)^.*f04.*&~(.*z.*)$ /k1=v1/ /k2=v2/ bar, cat
->
(^.*f04.*&~(.*z.*)$ AND /k1=v1/ AND /k2=v2/ AND bar) OR cat
最好的方法是什么?你知道吗
我想这样做:
按空格将表达式拆分为列表。 列表如下所示:
[^f04[^z]*$,^f00bar$,',',^.*f04.*&~(.*z.*)$,AND,foo,bar,OR,f04ba]
遍历列表,如果每个备选单词看起来都不像AND、OR或',,则在该单词后面添加AND,如果是',则将其改为OR。
这个好吗?在Python中,最好的方法是什么?你知道吗
你可以使用。。。正则表达式。首先,使用
re.split
分别在每个,
或OR
和每个空间或AND
进行拆分。你知道吗然后,将这些
str.join
组合起来,将AND
组包装成(...)
:但是请注意,这将在all
,
处拆分,即使这些应该是regex的一部分。我真的不明白这些应该如何被歧视。(使用更复杂的正则表达式而不是,|OR
可能会实现这一点,就像您在注释中显示的一样,我没有尝试这个。)此外,这将把连接词的每个部分包装成
(...)
,即使它们只有一个元素。这可以通过更复杂的列表理解来解决,首先检查组(sans空元素)的len
。你知道吗相关问题 更多 >
编程相关推荐