Python将字符串分割成碎片然后调整其结果

时间:2017-12-24 17:45:29

标签: python regex string split strip

我正在努力使下面的代码按预期工作。我得到了接受数字的工作, - 签署负数和点符号表示percision。但代码仍然允许多个 - 和。迹象。并且它不会检查它是否以它们开始或结束。

我想只获取数字, - 如果是负值则签名,如果是浮点数则只签署一个点。

这是我的代码:

# org_text = gets something from clipboard

new_text = [x.strip() for x in org_text.split(',')]  # as you can see new_text is a list of strings

if len(new_text) > 1:
    text = re.compile(r'[^\d.-]+').sub('', new_text[0])

稍后我会使用以下内容进行一些调整:

text = text.lstrip(' .').rstrip('-. ')
text = text[0] + text[1:].replace('-', '')

它并没有完全符合我的要求,我相信应该有一个更简单的方法。我尝试用正则表达式部分玩arround,但也没有做到这一点。

任何帮助将不胜感激。

编辑:我没有透露一些部分。我使用你可以从代码中看到的re.compile和sub。我正在尝试检查org_text中的剪贴板文本。然后我用逗号分隔内部的值。我只接受正则表达式'[^ \ d .-] +'字符并使用''删除原始字符串中的其余字符。在这一点上,我得到的一切正常,除了我在原始问题中提到的。我可以得到不止一个 - 而且。标志和我也让他们在不合适的地方。这是我试图修复的部分。

1 个答案:

答案 0 :(得分:1)

您的正则表达式[^\d.-]+不正确。您正试图negate存在数字.-,即除此之外的任何内容都匹配。

请改用此正则表达式。

正则表达式: ^-?\d+(?:\.\d+)?$

<强>解释

  • -?确保负号是可选的。如果存在则匹配。

  • \d+匹配小数点前的数字。

  • (?:\.\d+)?可选小数部分。如果存在则匹配。

<强> Regex101 Demo