gpt4 book ai didi

Python 正则表达式字符串扩展

转载 作者:太空狗 更新时间:2023-10-29 22:26:38 24 4
gpt4 key购买 nike

假设我有以下字符串:

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com