【问题标题】:Python splitting string to pieces then adjusting their resultsPython将字符串分割成碎片然后调整它们的结果
【发布时间】: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


【解决方案1】:

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

改用这个正则表达式。

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

说明:

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

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

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

Regex101 Demo

【讨论】:

  • 试过了,但对我不起作用。我正在使用 re.compile 和 sub 功能用逗号分隔符分割字符串。然后使用字符串的列表结果,我尝试将文本与我正在寻找的过滤器一起放置。可能我没有说清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多