我正在努力使下面的代码按预期工作。我得到了接受数字的工作, - 签署负数和点符号表示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 .-] +'字符并使用''删除原始字符串中的其余字符。在这一点上,我得到的一切正常,除了我在原始问题中提到的。我可以得到不止一个 - 而且。标志和我也让他们在不合适的地方。这是我试图修复的部分。
答案 0 :(得分:1)
您的正则表达式[^\d.-]+
不正确。您正试图negate存在数字.
和-
,即除此之外的任何内容都匹配。
请改用此正则表达式。
正则表达式: ^-?\d+(?:\.\d+)?$
<强>解释强>
-?
确保负号是可选的。如果存在则匹配。
\d+
匹配小数点前的数字。
(?:\.\d+)?
可选小数部分。如果存在则匹配。
<强> Regex101 Demo 强>