【问题标题】:Not able get desired output after string parsing through regex通过正则表达式解析字符串后无法获得所需的输出
【发布时间】:2020-11-10 12:10:32
【问题描述】:
input = 
6:/BENM/Gravity Exports/REM//INV: 3267/FEB20:65:ghgh
6:/BENM/Tabuler Trading/REM//IMP/2020-341

original_regex = 6:[A-Za-z0-9 \/\.\-:] - bt this is taking full string 6:/BENM/Gravity Exports/REM//INV: 3267/FEB20:65:ghgh

modified_regex_pattern = 6:[A-Za-z0-9 \/\.\-:]{1,}[\/-:]

在我想要输出的第一个字符串中 6:/BENM/Gravity Exports/REM//INV: 3267/FEB20 但它的捐赠直到:65: 任何人都可以提出更好的方法来写这个。 示例如下 https://regex101.com/r/pAduvy/1

【问题讨论】:

    标签: python regex


    【解决方案1】:

    例如,您可以使用末尾带有可选部分的捕获组来匹配 :digits:a-z 部分。

    (6:[A-Za-z0-9 \/.:-]+?)(?::\d+:[a-z]+)?$
    
    • ( 捕获第 1 组
      • 6:[A-Za-z0-9 \/.:-]+? 尽可能少匹配字符类中列出的任何一个
    • )关闭第一组
    • (?::\d+:[a-z]+)? 可选择匹配末尾您不想包含的部分
    • $ 字符串结束

    Regex demo

    注意不确定是否有意,但模式的最后一部分 [\/-:] 表示 ASCII 范围 47 - 58。


    或者更精确的模式来获得匹配

    6:/\w+/\w+ \w+/[A-Z]+//[A-Z]+(?:: \d+)?/[A-Z]*\d+(?:-\d+)?
    
    • 6:/\w+/\w+ 匹配 6 次和 2 次 / 后跟 1+ 个单词字符和一个空格
    • \w+/[A-Z]+//[A-Z]+ 匹配 1+ 个单词字符、/ 和大写字符、// 和大写字符
    • (?:: \d+)? 可选匹配空格和 1+ 位
    • /[A-Z]*\d+ 匹配 /,可选大写字符和 1 个以上数字
    • (?:-\d+)? 可选匹配 - 和 1+ 位

    Regex demo

    【讨论】:

    • 谢谢,但不能像这样硬编码,因为在某些情况下我们可能没有某些字符。字符串可以是“/BENM/Tabuler Trading”,就像这样。我面临的问题是多个:(冒号),:6,:65:是这个字符串中的标签,当我在正则表达式中包括:时,它也采用:65:标签,我只需要标签6的数据,这就是问题跨度>
    • @Navneet 你可以从第一个标签直到第一次出现下一个标签^6:.*?(?=:\d|$)regex101.com/r/wpikoU/1或者如果标签是可选的^(?:^6:)?.*?(?=:\d|$)regex101.com/r/pitdfR/1如果6不应该是硬编码的,你可以使用\d+来匹配1+位数。
    • @Navneet 有任何反馈吗?
    • 抱歉,无法更新,代码越来越复杂,让我用所有字符串运行这个正则表达式,bt 用于示例它的工作,谢谢
    • 现在接受这个,谢谢@第四只鸟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2016-04-29
    • 2012-08-07
    相关资源
    最近更新 更多