python - 我想在引号之间找到单词并更改位置
问题描述
我的计划是在文本中找到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)
我什至提取并更改了顺序,但我真的不知道如何替换它。
解决方案
你需要使用re.sub
来实现这一点。另外你需要使用\1 \2 \3
等等。像这样
re.sub(r"('\S*\s*\S+\s*')(bbb\s*)('\S+')", r"\3 \2 \1", text)
\1
等等是您的正则表达式的匹配项,如括号所示。的第二个参数re.sub
将构造结果。
推荐阅读
- django - 在 django 视图中手动更新模型的 FileField
- python - 如何在Python中对齐两个不同长度的数组(使用没有匹配元素的NaN)
- android - Flutter:如何将变量从 StatelessWidget 传递到 StatefulWidget
- c# - C# 登录表单、登录按钮、安全性
- python - 将 docx 表转换为 html(保留所有格式)或要在 html 中使用的图像
- html - CSS下拉菜单中的边框未隐藏且边框重叠
- jekyll - 在 Cloudcannon 上部署 jekyll 应用程序失败
- zabbix - Zabbix 监控 web 服务器经过 2 或 3 次检查
- c++ - 为什么使用 LLVM 时 std::ifstream 的缓冲会“中断”std::getline?
- apache - 将所有流量转发到一个子文件夹,将一个子文件夹转发到另一个子文件夹