首页 > 解决方案 > 我想在引号之间找到单词并更改位置

问题描述

我的计划是在文本中找到bbb,并在提取两边引号括起来的单词后重新定位它

text = "'Banana' aaaaa'Tomato' aaaaa'Tomato' aaaaa'Watermelon' aaaaaa 'Apple'bbb 'Banana' aaaa 'Orange' aaaaaa 'Melon' aaaaaa 'Persimmon' aaaaaaa 'Grape'bbb 'Apple' aaaaaa 'Grape' aaaaa'Tomato' aaaaa 'avocado' aaaaa 'watermelon' aaaaa 'apple'bbb 'mango' aaaa' orange' aaaaaa 'melon' aaaaaa 'persimmon' aaaaaaa 'plum' bbb 'tangerine' aaaaaa..."

例如,从上面的文字中提取'Apple'bbb 'Banana', 'Grape'bbb 'Apple', 'apple'bbb 'mango', 'plum' bbb 'tangerine' 并将顺序改为'Banana'bbb 'Apple ', 'Apple'bbb '葡萄', '芒果'bbb '苹果','tangerine' bbb '李子'

是在进行更改后更改文本。所以最后

text = "'Banana' aaaaa'Tomato' aaaaa'Tomato' aaaaa'Watermelon' aaaaaa 'Banana'bbb 'Apple' aaaa 'Orange' aaaaaa 'Melon' aaaaaa 'Persimmon' aaaaaaa 'Apple'bbb 'Grape' aaaaaa 'Grape' aaaaa'Tomato' aaaaa 'avocado' aaaaa 'watermelon' aaaaa 'mango'bbb 'apple' aaaa' orange' aaaaaa 'melon' aaaaaa 'persimmon' aaaaaaa 'tangerine' bbb 'plum' aaaaaa..."

就是让它变成这样。到目前为止我所做的是

text = "'Banana' aaaaa'Tomato' aaaaa'Tomato' aaaaa'Watermelon' aaaaaa 'Apple'bbb 'Banana' aaaa 'Orange' aaaaaa 'Melon' aaaaaa 'Persimmon' aaaaaaa 'Grape'bbb 'Apple' aaaaaa 'Grape' aaaaa'Tomato' aaaaa 'avocado' aaaaa 'watermelon' aaaaa 'apple'bbb 'mango' aaaa' orange' aaaaaa 'melon' aaaaaa 'persimmon' aaaaaaa 'plum' bbb 'tangerine' aaaaaa..."

p = re.compile(r"'(\S+\s*\S+\s*)bbb\s*'(\S+)'")
string = p.findall(text)

print(string)

a = list(string[0])
a.reverse()

b = list(string[1])
b.reverse()

print(a)
print(b)

我什至提取并更改了顺序,但我真的不知道如何替换它。

标签: pythonre

解决方案


你需要使用re.sub来实现这一点。另外你需要使用\1 \2 \3等等。像这样

re.sub(r"('\S*\s*\S+\s*')(bbb\s*)('\S+')", r"\3 \2 \1", text)

\1等等是您的正则表达式的匹配项,如括号所示。的第二个参数re.sub将构造结果。


推荐阅读