如何在点后分割字符串,除非点后的字符是数字

霍西耶

我只需要在字符串的开头使用字母和数字,但是有些数字是小数。字符串的格式并非全部相同。以下是一些数据的一些示例以及需要返回的数据:

HB61 .M16 1973我需要HB61退货

HB97.52 .R6163 1982我需要HB97.52返回

HB98.V38 1994我需要HB98退货

HB 119.G74 A3 2007我需要HB119返回

我对编码非常陌生,所以希望有一些我不知道的简单解决方案?

我只打算在第一个点将其拆分,然后除去空格,但这不允许我保留我需要的小数,例如HB97.52。我目前编写的代码只是一次测试一个字符串。代码如下:

data = input("Data: ")    
components = data.split(".")    
str(components)    
print(components[0].replace(" ", ""))

除带小数的字符串外,此方法均按预期工作。对于HB97.52 .R6163 1982,我希望返回HB97.52,但仅返回HB97。

迪斯

以下正则表达式提取字符串开头的字母,后跟可选空格,后跟[可能是浮点数]数字:

s = ['HB61 .M16 1973', 'HB97.52 .R6163 1982', 
     'HB98.V38 1994', 'HB 119.G74 A3 2007']

import re
pattern = r"^[a-z]+\s*\d+(?:\.\d+)?"
[re.findall(pattern, part, flags=re.I)[0] for part in s]
#['HB61', 'HB97.52', 'HB98', 'HB 119']

如果您不希望在输出中使用空格,则此略有不同的模式将分别提取字母部分和数字部分,然后将它们结合在一起:

pattern = r"(^[a-z]+)\s*(\d+(?:\.\d+)?)"
list(map("".join, [re.findall(pattern, part, flags=re.I)[0] for part in s]))
#['HB61', 'HB97.52', 'HB98', 'HB119']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章