【问题标题】:Regex for middle position Replacing中间位置的正则表达式替换
【发布时间】:2016-06-06 23:04:28
【问题描述】:

我想替换下面的字符串

comments={ts=2010-02-09T04:05:20.777+0000, comment_id=529590|2886|LOL|Baoping Wu|529360}

comments={ts=2010-02-09T04:05:20.777+0000, comment_id=529590, user_id = 2886, comment='LOL', user= 'Baoping Wu', post_commented=529360}

我的方法是 comment_id=.([0-9])* 第一次替换 其他替换对我来说很难。谁能帮帮我?

【问题讨论】:

  • 您使用什么编程语言?你能做替代手术吗?
  • 我使用的不是编程语言,而是 Apple Mac 的 TextMate
  • TextMate 使用 Oniguruma 正则表达式语法。

标签: regex parsing textmate


【解决方案1】:

您可以通过一次搜索和替换操作来执行所有这些转换。使用以下具有捕获组的正则表达式:

(comment_id=)(\d+)\|(\d+)\|([^|]+)\|([^|]+)\|(\d+)

替换为$1$2, user_id = $3, comment='$4', user= '$5', post_commented=$6

regex demo

  • (comment_id=) - 第 1 组,文字字符序列
  • (\d+) - 第 2 组:一位或多位数字
  • \| - 文字管道符号
  • (\d+) - 第 3 组匹配另一部分数字
  • \| - 又是一个管道
  • ([^|]+) - 第 4 组捕获除 | 之外的一个或多个符号
  • \| - 又是一个管道
  • ([^|]+) - Group 5 capturing one or more symbols other than|`
  • \| - 另一个管道
  • (\d+) - 第 6 组匹配另一部分数字

在替换字符串中,$n 是对捕获组的反向引用。

【讨论】:

  • 谢谢:)。我的数据集太大,无法在此网站上进行测试。你知道我如何用 python 脚本测试它吗
  • regex101.com,您可以获得该 Python 代码:转到 代码生成器 部分(参见左下窗格)。 Python 代码示例位于底部。请注意,Python 反向引用是 \ + digit 形式。替换为\1\2, user_id = \3, comment='\4', user= '\5', post_commented=\6
  • 我在 IDLE 上试过了。我得到如下语法错误: p = re.compile(ur'(comment_id=)(\d+)\|(\d+)\|([^|]+)\|([^|]+)\| (\d+)') SyntaxError: invalid syntax 由于这个符号 '
  • 对不起,我现在在公共汽车上,无法检查,但语法是正确的。写import re,然后声明s = "your string",然后检查print(re.sub(r'(comment_id=)(\d+)\|(\d+)\|([^|]+)\|([^|]+)\|(\d+)', r"\1\2, user_id = \3, comment='\4', user= '\5', post_commented=\6", s))。在现实生活中,您可能希望逐行读取文件并将修改后的行写入单独的文件。
  • 请注意,我将模式放在单引号之间,将替换模式放在双引号之间。
【解决方案2】:

试试这个:

comment_id=.*?(?=,)

example

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2017-12-10
    • 2019-01-24
    • 2011-07-13
    • 2015-01-24
    相关资源
    最近更新 更多