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

标签 python regex string substring

<分区>

假设我有一个如下形式的字符串:

ABCDEF_(0-100;1)(A|B)_GHIJ_(A-F)

我希望能够将其扩展到:

ABCDEF_0A_GHIJ_A
ABCDEF_1A_GHIJ_A
ABCDEF_2A_GHIJ_A
...
ABCDEF_100A_GHIJ_A

ABCDEF_0B_GHIJ_A
ABCDEF_1B_GHIJ_A
ABCDEF_2B_GHIJ_A
...
ABCDEF_100B_GHIJ_A

ABCDEF_0A_GHIJ_B
ABCDEF_1A_GHIJ_B
ABCDEF_2A_GHIJ_B
...
ABCDEF_100A_GHIJ_B

ABCDEF_0B_GHIJ_B
ABCDEF_1B_GHIJ_B
ABCDEF_2B_GHIJ_B
...
ABCDEF_100B_GHIJ_B

ABCDEF_0A_GHIJ_C
ABCDEF_1A_GHIJ_C
ABCDEF_2A_GHIJ_C
...
ABCDEF_100A_GHIJ_C

..and so on

第二行的字符串是:

STRING_(START-END;INC)_STRING(A OR B)_STRING(A THRU F)

但是,正则表达式符号可以在字符串中的任何位置。即字符串也可以是:

ABCDEF_(A|B)_(0-100;1)_(A-F)_GHIJ

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

trend = 'ABCDEF_(0-100;1)(A|B)_GHIJ_(A-F)'

def expandDash(trend):
    dashCount = trend.count("-")
    for dC in range(0, dashCount):
        dashIndex = trend.index("-")-1
        trendRange = trend[dashIndex:]
        bareTrend = trend[0:trend.index("(")]
        beginRange = trendRange[0:trendRange.index("-")]
        endRange = trendRange[trendRange.index("-"):trendRange.index(";")]
        trendIncrement = trendRange[-1]
        expandedTrendList = []


def regexExpand(trend):

    for regexTrend in trend.split(')'):
        if "-" in regexTrend:
            print trend
            expandDash(regexTrend)

我显然被困在这里......

有什么简单的方法可以使用 REGEX 进行字符串扩展吗?

最佳答案

您可以使用正则表达式相当轻松地解析您的迷你表达式语言。但是您不能使用正则表达式来实际进行扩展:

TREND_REGEX = re.compile('(^.*?)(?:\((?:([^-)])-([^)])|(\d+)-(\d+);(\d+)|([^)|]+(?:\|[^)|]+)*))\)(.*))?$')

def expand(trend):
    m = TREND_REGEX.match(trend)
    if m.group(8):
        suffixes = expand(m.group(8))
    else:
        suffixes = ['']
    if m.group(2):
        for z in suffixes:
            for i in range(ord(m.group(2)), ord(m.group(3))+1):
                yield m.group(1) + chr(i) + z
    elif m.group(4):
        for z in suffixes:
            for i in range(int(m.group(4)), int(m.group(5))+1, int(m.group(6))):
                yield m.group(1) + str(i) + z
    elif m.group(7):
        for z in suffixes:
            for s in m.group(7).split('|'):
                yield m.group(1) + s + z
    else:
        yield trend

关于Python复杂的正则表达式字符串扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20037999/

相关文章:

python - 使用附加参数在本地执行远程 python 脚本

python - 使用 zlib 以 C 语言读取 Python 压缩数据

python - python中的关联组

python - 哪个 Linux 发行版默认附带 python 2.6?

javascript - 正则表达式允许 9 个数字但阻止超过 4 个重复数字

MySQL REGEXP 不匹配字符串

c - 如何接受未确定大小的字符串输入?

javascript - angularJS:用于模式的多个匹配的ng-pattern

c - 字符指针的整数警告

java - 我无法在 android 上的 asynctask 中获取我的值