【发布时间】:2023-03-13 23:05:01
【问题描述】:
我很难理解一个看似简单的问题。我想要做的是稍微改变一个字符串,通过将所有值包装在一个分隔符中,比如括号(),用一个像引号这样的字符,然后标题外壳所有的单词。但我无法让它按预期完全工作。
例如,给定一个简单的字符串:
hello(world)
我想通过稍微修改来替换括号内的部分 - 在这种情况下,用引号括起来:
hello("World")
我能够做到这一点,但问题是当我嵌套括号时它不起作用:
hi (hello(world(a test)))
我想结束:
hi ("Hello("World("A Test")")")
但很遗憾,我没有得到预期的结果。
这是我正在测试的代码。顺便说一句,我从here这篇文章中得到了获取字符串中字符索引的想法。
import re
def wrap_values_within_group(s: str, delimiter_group='()'):
start_char, end_char = delimiter_group
start_indices = [i.start() for i in re.finditer(re.escape(start_char), s)]
end_indices = [i.start() for i in re.finditer(re.escape(end_char), s)]
parts = []
for i in range(len(start_indices)):
start_pos = start_indices[i]
end_pos = end_indices[-i]
repl_pos = start_pos + 1
parts.append(s[:repl_pos])
parts.append('"' + s[repl_pos:end_pos].title() + '"')
parts.append(s[end_pos:])
return ''.join(parts)
我知道不使用正则表达式我也可以实现这一点,但我想看看如果可能的话不使用正则表达式替换是否可行。理想情况下,我也更喜欢在一个函数中执行此操作,因为我认为重复调用函数以进行替换可能会有点慢。欢迎提出任何建议。
【问题讨论】:
-
所以基本上你想用
("替换每个(,用")替换每个)? -
@mkrieger1 我没有这么想,但是当你这么说的时候听起来很简单。实际用例有点不同 - 让我更新一下问题。
-
我刚刚更新了帖子。我应该更好地表达它,但我还想转换组内的值(例如通过大写每个单词)。
-
@rv.kvtech 是 my answer 为您工作吗?
-
我不确定您正在应用哪种转换。如果您确实需要获取每个匹配括号内的全部内容,您可以首先读取字符串并计算/索引左括号和右括号,然后提取内容并应用您的转换。您可以从外到内递归地执行此操作。
标签: python str-replace