使用Python替换或交换文件中的子字符串

2023-11-29

假设我有以下形式的 ASCII 文件中的一行:

{text1} {stringA} {text2} {stringB} {text3}

where {stringA} and {stringB}是感兴趣的子串。我们分别称它们为“A”和“B”。琴弦{text1}, {text2}, and {text3}是不包含 A 或 B 的任意长度的字符串(可能为空)。

我想要在Python中做的只是交换A和B,使得该行从

{text1} {stringA} {text2} {stringB} {text3}

to

{text1} {stringB} {text2} {stringA} {text3}

如果有任何帮助,我将不胜感激。我认为通过获得关于这个问题的帮助,它将帮助我学习更好地使用 Python 中的正则表达式。

注意{text1}, {text2}, and {text3}是未知的字符串。

我们确切地知道子串 A 和 B。我们知道在该行中 A 在 B 之前。然而,我们不知道它们之前/之间/之后是什么(如果有的话)。

示例(A=约翰,B=蒂姆):

(1) 这个:

“我告诉约翰把包交给蒂姆。”

改为这样:

“我告诉蒂姆把包交给约翰。”

(2)这个:

“约翰向蒂姆问好。”

改为这样:

“蒂姆向约翰打招呼。”

(3)这个:

“约翰!h9aghag蒂姆”

改为这样:

“蒂姆!h9aghag约翰”


>>> import re
>>> text = '{text1} {stringA} {text2} {stringB} {text3}'
>>> re.sub(r'(stringA)(.*)(stringB)', r'\3\2\1', text)
'{text1} {stringB} {text2} {stringA} {text3}'

Replace stringA and stringB使用您感兴趣的子字符串,请注意您可能想要re.escape()它们以防子字符串可以包含在正则表达式中具有特殊含义的字符。

测试用例:

>>> stringA = 'John'
>>> stringB = 'Tim'
>>> regex = re.compile(r'(%s)(.*)(%s)' % (stringA, stringB))
>>> regex.sub(r'\3\2\1', "I told John to give the bag to Tim.")
'I told Tim to give the bag to John.'
>>> regex.sub(r'\3\2\1', "John said hello to Tim.")
'Tim said hello to John.'
>>> regex.sub(r'\3\2\1', "John!h9aghagTim")
'Tim!h9aghagJohn'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python替换或交换文件中的子字符串 的相关文章

随机推荐

  • 如何foreach具有键值的多维数组

    我有一个带有键值的多维数组 我想循环该数组中的数据 但我不知道如何 这是我的数组 myArray Array 134 gt Array 1138 gt Array id gt 1138 qty gt 1 price gt 4900000 n
  • x64 汇编函数(调用/返回与推送/弹出/跳转)

    使用内置调用和返回指令与手动压入和弹出堆栈以及使用函数跳转之间有什么区别 从功能上讲 如果你做得正确 什么也没有 然而 它需要更多的指令和 或寄存器来模拟call ret using push pop 当然如果你真的想发挥到极致 你也可以效
  • 如何显示 JQPLOT 图形而不是长文本

    我在控制器类中有一个返回 JSON 数据的方法 public ActionResult ChartDataJSON Chart chart new Chart DataSet ds dbLayer GetChartData DataTabl
  • D3js 代码在调用两次时会复制图表而不是刷新

    这是我的 D3js 代码 function ShowGraph data var w 600 h 600 padding 36 p 31 barwidth 1 var bar height d3 scale linear domain d3
  • git分支工作流程策略

    我是 git 的新手 对 Git 有一点了解 我公司目前有1个方案 该方案分为5个产品 每个产品由不同的团队处理 目前我公司 git 有 5 个分支机构 例如 dev 该分支供开发人员构建程序 dev program com test al
  • 在 jsdom 加载的脚本中设置全局变量

    我正在尝试在 Node js 中运行一些浏览器代码以简化测试 deasync就是这个原因 目前 我使用jsdom解析唯一的html文件 起初 我试图让它也加载脚本 这些脚本链接在
  • 从文本文件中获取数据并将其显示在html表格中

    我为每一行都有一个这种模式的文本文件 Username Score 我正在尝试以此创建一个记分板 这是我的尝试 table width 200 border 1 tr td width 85 Nom td td width 99 Score
  • 如何循环访问 For 循环容器中以数字形式存储的日期值?

    我有一个For Loop Container使用日期作为InitExpression 加载日期 但该值采用数字格式 20120229 我需要这种方式 因为我无法修改它 现在 我想设置AssingExpression值以这样的方式 加载日期变
  • Oracle SQL相关更新

    我有三张桌子 t1 columns a c t2 columns a b t3 columns b c d 现在我想要的是用 t3 d 更新 t1 c 但我不能只使用 t1 c t3 c 从 t3 更新 t1 我还必须遍历 t3 b t2
  • 从 google apps 脚本发送 iso-8859-1 字符

    我正在尝试调用从谷歌应用程序脚本发送短信的服务 该服务需要 ISO 8859 1 格式的数据 下面的代码发送一条消息 其中 为坏字符 function sendSMS var doc SpreadsheetApp getActiveSpre
  • 列表上的 Groovy 点表示法

    我不明白 Groovy 中以下构造的目的 每当你有一些东西的集合时 就调用它items 您只需访问集合上的属性即可映射该属性 即 items prop items collect it prop 这对我来说看起来很奇怪 因为我认为第一个符号
  • 警告:mysqli::mysqli():(HY000/1045):[重复]中的用户“database”@“localhost”(使用密码:NO)访问被拒绝

    这个问题在这里已经有答案了 我正在尝试使用 php 连接数据库 但出现此错误 警告 mysqli mysqli HY000 1045 第 7 行 C wamp64 www Login test 2 0 connectivity php 中的
  • 如何从消息队列中删除消息(仅当其格式正确时)?

    我想从一个队列中获取消息并将其发送到数据库 我只想在特定格式下才这样做 如果我使用Receive直接调用方法 访问时出现异常Body的消息 我失去了消息 因为Receive的方法MessageQueue从队列中删除消息 为了避免丢失消息 现
  • 通用列表 - 移动列表中的项目

    所以我有一个通用列表和一个oldIndex and a newIndex value 我想将物品移至oldIndex to newIndex 尽可能简单 有什么建议么 Note 该项目应位于以下项目之间 newIndex 1 and new
  • 无法导入 facebook-sdk 4.0.1

    我有 android studio 1 1 0 我刚刚创建了一个新项目 我正在尝试导入新的 facebook sdk 4 0 1 但无法执行此操作 我遵循脸书入门 But can not get it work My app structu
  • 如何检查 URL 是否有效

    如何检查字符串是否是有效的 URL 例如 http hello it gt yes http bra ziz gt no 如果这是一个有效的 URL 我如何检查它是否相对于图像文件 Notice 正如 CGuess 所指出的 这个问题存在一
  • 单击按钮之前执行 Tkinter 按钮命令[重复]

    这个问题在这里已经有答案了 我创建了一个框架 其中我有两个浏览按钮 我想浏览两个以 txt 扩展名结尾的文件并将其打印在屏幕上 在我的场景中 在按下框架上的按钮之前浏览调用的函数 我期待当我按下按钮时它应该被调用 附完整代码 请有人纠正我做
  • Ruby `require` 调用在自定义代码上失败

    我发现我使用没有问题require加载类似 Sinatra Web 框架的东西 但我似乎无法使用require加载我自己的自定义代码 例如我有两个文件 test1 rb test2 rb test1 rb 的内容是 usr bin env
  • CPUID标准函数01H是什么?

    我需要检查ECX对于位 30 这是必要的 CPU 功能RDRAND 来自RDRAND Wiki 如果支持 则在调用 CPUID 标准功能 01H 后设置 ECX 寄存器的位 30 我不太清楚这意味着什么 标准功能01H 意思是不是EAX 8
  • 使用Python替换或交换文件中的子字符串

    假设我有以下形式的 ASCII 文件中的一行 text1 stringA text2 stringB text3 where stringA and stringB 是感兴趣的子串 我们分别称它们为 A 和 B 琴弦 text1 text2