Python正则表达式字符串扩展

马克·肯尼迪

假设我有以下字符串:

trend  = '(A|B|C)_STRING'

我想将此扩展为:

A_STRING
B_STRING
C_STRING

OR条件可以在字符串中的任何位置。STRING_(A|B)_STRING_(C|D)

将扩展到

STRING_A_STRING_C
STRING_B_STRING C
STRING_A_STRING_D
STRING_B_STRING_D

我还想介绍一个空条件的情况:

(|A_)STRING 将扩展为:

A_STRING
STRING

到目前为止,这是我尝试过的方法:

def expandOr(trend):
    parenBegin = trend.index('(') + 1
    parenEnd = trend.index(')')
    orExpression = trend[parenBegin:parenEnd]
    originalTrend = trend[0:parenBegin - 1]
    expandedOrList = []

    for oe in orExpression.split("|"):
        expandedOrList.append(originalTrend + oe)

但这显然行不通。

使用正则表达式有什么简单的方法吗?

蒂姆·彼得斯

这是一种非常干净的方法。弄清楚它是如何工作的,您将很开心:-)

def expander(s):
    import re
    from itertools import product
    pat = r"\(([^)]*)\)"
    pieces = re.split(pat, s)
    pieces = [piece.split("|") for piece in pieces]
    for p in product(*pieces):
        yield "".join(p)

然后:

for s in ('(A|B|C)_STRING',
          '(|A_)STRING',
          'STRING_(A|B)_STRING_(C|D)'):
    print s, "->"
    for t in expander(s):
        print "   ", t

显示:

(A|B|C)_STRING ->
    A_STRING
    B_STRING
    C_STRING
(|A_)STRING ->
    STRING
    A_STRING
STRING_(A|B)_STRING_(C|D) ->
    STRING_A_STRING_C
    STRING_A_STRING_D
    STRING_B_STRING_C
    STRING_B_STRING_D

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python正则表达式-扩展字符串

来自分类Dev

Python复杂的正则表达式字符串扩展

来自分类Dev

正则表达式python压缩字符串

来自分类Dev

Python正则表达式分隔字符串

来自分类Dev

复杂字符串的Python正则表达式

来自分类Dev

python字符串中的正则表达式

来自分类Dev

python中的字符串正则表达式

来自分类Dev

在python正则表达式中提取字符串的子字符串

来自分类Dev

Python3.7:多行字符串之间的字符串的正则表达式?

来自分类Dev

Bash脚本-backtick / grep正则表达式字符串中的变量扩展

来自分类Dev

正则表达式在文件扩展名后删除字符串

来自分类Dev

正则表达式:搜索字符串在确切的行数上扩展

来自分类Dev

正则表达式匹配的字符串不结束或包含文件扩展名

来自分类Dev

正则表达式提取数字和字符串扩展

来自分类Dev

通过正则表达式从正则表达式添加字符串

来自分类Dev

正则表达式:为字符串编辑正则表达式

来自分类Dev

正则表达式之间切字符串

来自分类Dev

使用正则表达式匹配字符串?

来自分类Dev

正则表达式区分字符串键

来自分类Dev

逗号分隔字符串的正则表达式

来自分类Dev

Java正则表达式匹配字符串

来自分类Dev

Java字符串与正则表达式的区别?

来自分类Dev

Java正则表达式截断字符串

来自分类Dev

拆分字符串,不带正则表达式

来自分类Dev

正则表达式分割字符串

来自分类Dev

正则表达式提取变量字符串

来自分类Dev

返回匹配正则表达式的字符串

来自分类Dev

使用正则表达式验证字符串

来自分类Dev

匹配不带正则表达式的字符串