Python正则表达式提取两个特殊字符之间的正数和负数

需要从字符串中提取值,该值可以包含逗号,小数点,逗号和小数点都可以,不带逗号或小数点,带逗号或小数点。


例如:


1,921.15

921.15

921

1,921


re.findall(r'[-+]?\d+[,.]?\d*',st)[3]" its extracting only 1,921 but not as 1,921.15



st='["FL gr_20 PT10 MT3\'><strong>1,921.15</strong>"]'

我试过re.findall(r'[-+]?\d+[,.]?\d*',st)[3]它只提取 1,921 但不是 1,921.15


从下面的字符串 st,使用 re 模块,我需要提取值 1,921.15


st='["FL gr_20 PT10 MT3\'><strong>1,921.15</strong>"]'


Expected = 1,921.15

Actual = 1,921


梵蒂冈之花
浏览 303回答 3
3回答

慕运维8079593

一般来说,当您想使用 Python 正则表达式从文本中提取正整数或负整数或浮点数时,可以使用以下模式re.findall(r'[-+]?(?:\d{1,3}(?:,\d{3})+|\d+)(?:\.\d+)?',&nbsp;text)请参阅此正则表达式演示。注意:\d{1,3}(?:,\d{3})+alternative 匹配以逗号作为千位分隔符的整数。您可以调整它以匹配您需要的千位分隔符,例如,\xA0如果千位分隔符是一个不间断的空格,或者\.它是一个点等。更多选项看起来像re.findall(r'[-+]?\d+(?:\.\d+)?',&nbsp;text)&nbsp;#&nbsp;Integer&nbsp;part&nbsp;is&nbsp;compulsory,&nbsp;e.g.&nbsp;5.55 re.findall(r'[-+]?\d*\.?\d+',&nbsp;text)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Also&nbsp;matches&nbsp;.57&nbsp;or&nbsp;-.76在这里,您要提取介于>和<字符之间的任何数字。您可以使用re.findall(r'>([-+]?\d[\d,.]*)<',&nbsp;text)请参阅正则表达式演示。细节>- 一个>字符([-+]?\d[\d,.]*)- 第 1 组:[-+]?- 一个可选的-或+\d- 一个数字[\d,.]*- 0 个或多个数字,,或.请参阅Python 演示:import rest='''["FL gr_20 T3\'><strong>+1,921.15</strong>"]' st='["FL gr_20 T3\'><strong>-921.15</strong>"]' st='["FL gr_20 T3\'><strong>21.15</strong>"]' st='["FL gr_20 T3\'><strong>1,11,921.15</strong>"]' st='["FL gr_20 T3\'><strong>1,921</strong>"]' st='["FL gr_20 T3\'><strong>112921</strong>"]' st='["FL gr_20 T3\'><strong>1.15</strong>"]' st='["FL gr_20 T3\'><strong>1</strong>"]'''print(re.findall(r'>([-+]?\d[\d,.]*)<', st))# => ['+1,921.15', '-921.15', '21.15', '1,11,921.15', '1,921', '112921', '1.15', '1']

陪伴而非守候

当数字有“,”和“。”时,您的正则表达式不会考虑在内。您可以使用以下正则表达式来匹配所有情况:re.findall(r'[-+]?\d+(?:,\d+)?(?:\.\d+)?'

绝地无双

看起来您试图捕获所有任何有效的数字格式,所以这会起作用:[+-]?\d+(?:,\d{3})*(\.\d+)*https://regex101.com/r/5bygVO/1
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python