【问题标题】:Regex to split positive/negative float/int from string正则表达式从字符串中拆分正/负浮点/整数
【发布时间】:2020-09-06 01:39:42
【问题描述】:

如何调整以下代码以返回此示例中的单词和数字?

下面的正则表达式很好地提取了正负整数/浮点数,但我也想保留单词 ('abc')。

numeric_const_pattern = '[-+]? (?: (?: \d* \. \d+ ) | (?: \d+ \.? ) )(?: [Ee] [+-]? \d+ ) ?'
rx = re.compile(numeric_const_pattern, re.VERBOSE)
rx.findall("-1 abc -1m abc -2.0 abc -2.0m abc 1 abc 1m abc 2.0 abc 2.0m abc")

谢谢

伊恩

【问题讨论】:

    标签: python regex


    【解决方案1】:

    以下正则表达式匹配“任意数字(可选负数和浮点数)或'abc'”:

    rx = re.compile(r'(-?\d+\.?\d*|abc)', re.VERBOSE)
    rx.findall("-1 abc -1m abc -2.0 abc -2.0m abc 1 abc 1m abc 2.0 abc 2.0m abc")
    
    ['-1', 'abc', '-1', 'abc', '-2.0', 'abc', '-2.0', 'abc', '1', 'abc', '1', 'abc', '2.0', 'abc', '2.0', 'abc']
    

    但是请注意,您现有的正则表达式有很多更复杂的测试用例,因此您的正则表达式太复杂,或者问题/示例数据太简单。

    【讨论】:

      【解决方案2】:

      如果您想保留所有abc 字符串,并且您想要对数字字符串进行的唯一更改是删除m,似乎将问题重新定义为“删除@ 987654323@从每个单词的末尾开始”:

      >>> [x[:-1] if x.endswith("m") else x
      ... for x in
      ... "-1 abc -1m abc -2.0 abc -2.0m abc 1 abc 1m abc 2.0 abc 2.0m abc".split()
      ... ]
      ['-1', 'abc', '-1', 'abc', '-2.0', 'abc', '-2.0', 'abc', '1', 'abc', '1', 'abc', '2.0', 'abc', '2.0', 'abc']
      

      【讨论】:

        猜你喜欢
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多