gpt4 book ai didi

python - 对字符串中与正则表达式模式不匹配的所有部分进行操作的函数

转载 作者:行者123 更新时间:2023-12-01 08:17:36 26 4
gpt4 key购买 nike

假设我有一个字符串:

"a bb c exclude_start d 3 f g h _ k l . exclude_end n 0 P exclude_start q r exclude_end s"

并假设我要应用一个 upper 函数,该函数将返回:

"A BB C exclude_start d 3 f g h _ k l . exclude_end N 0 P exclude_start q r exclude_end S"

我想要一个解决方案,该解决方案允许排除 n 个 block ,并将 upper 函数仅应用于这些 block 之外的字符。

如果有一种方法可以正则表达式仅匹配排除之外的字符串,然后仅将upper应用于这些字符串,那就太好了。

最佳答案

我不确定是否有办法用单个正则表达式来做到这一点,但这是我的思考过程。我想我们想要将字符串分开,这样我们就可以只大写不在排除 block 中的部分。做到这一点的方法是创建一个正则表达式来匹配排除 block :

>>> import re
>>> exclude_pattern = re.compile(r'(exclude_start.*?exclude_end)')

我们需要在其中包含问号,这样它就不会贪婪地匹配。

由于我们希望保留与 exclude_pattern 匹配的字符串部分,而不是仅仅将它们丢弃,因此我们可以使用 re.split :

If capturing parentheses are used in pattern, then the text of all groups in the pattern are also returned as part of the resulting list.

这就是为什么我们在 exclude_pattern 中需要括号。

接下来我们要使用该模式分割字符串:

>>> input_string = "a bb c exclude_start d 3 f g h _ k l . exclude_end n 0 P exclude_start q r exclude_end s"
>>> exclude_pattern.split(input_string)
['a bb c ', 'exclude_start d 3 f g h _ k l . exclude_end', ' n 0 P ', 'exclude_start q r exclude_end', ' s']

这为我们提供了所需的分离。

接下来我们想要的就是仅upper与我们的排除模式不匹配的字符串。为此,我认为我们可以在列表上映射一个 lambda,根据我们的排除模式检查每个条目,并且只检查不匹配的条目:

>>> list(map(lambda s: s.upper() if not exclude_pattern.match(s) else s, exclude_pattern.split(input_string)))
['A BB C ', 'exclude_start d 3 f g h _ k l . exclude_end', ' N 0 P ', 'exclude_start q r exclude_end', ' S']

list() 只是为了让我们可以看到生成的 map 对象中的内容。

之后我们将它们重新组合在一起:

>>> ''.join(map(lambda s: s.upper() if not exclude_pattern.match(s) else s, exclude_pattern.split(input_string)))
'A BB C exclude_start d 3 f g h _ k l . exclude_end N 0 P exclude_start q r exclude_end S'

如果您不想将其作为单行代码(这有点恶心),我们可以将其变成一个函数:

def excluded_upper(input_string):
exclude_pattern = re.compile(r'(exclude_start.*?exclude_end)')
split_string = exclude_pattern.split(input_string)
output = []
for s in split_string:
if exclude_pattern.match(s):
output.append(s)
else:
output.append(s.upper())
return ''.join(output)

关于python - 对字符串中与正则表达式模式不匹配的所有部分进行操作的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895428/

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