【发布时间】:2017-12-24 17:45:28
【问题描述】:
我正在尝试使下面的代码按预期工作。我让它接受数字, - 负数符号和精确点符号。但是代码仍然允许多个 - 和 .迹象。而且它不检查它是从它们开始还是以它们结束。
我只想获取数字, - 如果它是负值则标记,如果它是浮点数则只标记一个点。
这是我的代码:
# 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('-', '')
它并不完全符合我的要求,而且我相信应该有更简单的方法。我尝试过使用正则表达式部分,但也没有成功。
任何帮助将不胜感激。
编辑:我没有说清楚一些部分。我使用你可以从代码中看到的 re.compile 和 sub。我正在尝试检查 org_text 中的剪贴板文本。然后我用逗号分隔里面的值。我只接受正则表达式 r'[^\d.-]+' 字符并使用 '' 删除原始字符串中的其余部分。在这一点上,除了我在原始问题中提到的之外,我一切都正常工作。我可以得到不止一个 - 和 .标志,我也把它们放在不合适的地方。这就是我要修复的部分。
【问题讨论】:
-
使用
r'^-?\d*\.?\d+$'作为数字的正则表达式 -
请举一个
org_text的例子。 -
任何文本......它来自剪贴板。我编辑了我的问题以使其更清楚。
-
非指数、数字浮点解析标准是
^-?(?:\d+(?:\.\d*)?|\.\d+)$。但这是一个侧面问题。我读了你的帖子,你有一些概念上的错误。一方面,在拆分后,您应该删除所有空格,然后使用此正则表达式。如果匹配,则保留该值,如果不匹配,则不要保留它。如果您有超过 1 个小数点,您将无法辨别小数点的正确位置。您无法修复它们。 -
我给出的代码按照我解释的方式工作。代码中的空格被删除。因为我只接受数字,点和减号..因此删除了空格。我只是在代码的第二部分添加空格“以防万一”。我也不想控制点号。我想保留第一个点,然后删除其余的。
标签: python regex string split strip