Python将实数/浮点数与正则表达式匹配
我不是最擅长复古的 有人能告诉我,在出现文字“each”之前,这个模式是否可以返回一个整数或十进制数的单个匹配项?数字和字符串将用单个空格分隔Python将实数/浮点数与正则表达式匹配,python,regex,Python,Regex,我不是最擅长复古的 有人能告诉我,在出现文字“each”之前,这个模式是否可以返回一个整数或十进制数的单个匹配项?数字和字符串将用单个空格分隔 for each in parsed: if measure_string.find(each)>-1: r = re.compile("([0-9]\.?[0-9]?) "+each) b = re.match(r,measure_string)
for each in parsed:
if measure_string.find(each)>-1:
r = re.compile("([0-9]\.?[0-9]?) "+each)
b = re.match(r,measure_string)
if b:
return b, each
谢谢你看
[0-9]\.?[0-9]?
一旦出现数字,第一个[0-9]将匹配。
这个将匹配0-1个周期
[0-9]? 将匹配0-1个数字
因此,您的正则表达式将解析1、11、1.1,而不是1.11或11.1
如果您想解析以上所有内容,我建议您执行以下操作
([0-9]+(?:\.[0-9]+)?)(?:\s)
[0-9]+-匹配一个或多个数字\-匹配1个周期
[0-9]*? - 匹配所有剩余数字。
()? - 输入此正则表达式0或1次 括号内的任何内容都将被捕获。如果您看到一个包含在(?:…)中的正则表达式,它是一个非捕获正则表达式。但是如果(…)包含在(…)中,它将被(…)正则表达式捕获。。。有点乱。但是上面提到的应该只捕捉数字,而不是空间 一旦出现数字,第一个[0-9]将匹配。 这个将匹配0-1个周期 [0-9]? 将匹配0-1个数字 因此,您的正则表达式将解析1、11、1.1,而不是1.11或11.1 如果您想解析以上所有内容,我建议您执行以下操作
([0-9]+(?:\.[0-9]+)?)(?:\s)
[0-9]+-匹配一个或多个数字\-匹配1个周期
[0-9]*? - 匹配所有剩余数字。
()? - 输入此正则表达式0或1次 括号内的任何内容都将被捕获。如果您看到一个包含在(?:…)中的正则表达式,它是一个非捕获正则表达式。但是如果(…)包含在(…)中,它将被(…)正则表达式捕获。。。有点乱。但是上面的操作应该只捕获数字,而不捕获空间。这样可以:
import re
def parse(measure_string,each):
r = re.compile(r"\d+(\.\d*)?(?=\s"+each+")")
b = re.match(r, measure_string)
if(b):
return b.group(0)
我们使用了带?=的正向前瞻,以便仅当浮点后面有空格和字符串each
时才匹配浮点,但不将该空格和each
包含在匹配中。
然后,我们返回匹配的字符串,其中包含MatchObject.group(0)
,按照。这将执行以下操作:
import re
def parse(measure_string,each):
r = re.compile(r"\d+(\.\d*)?(?=\s"+each+")")
b = re.match(r, measure_string)
if(b):
return b.group(0)
我们使用了带?=的正向前瞻,以便仅当浮点后面有空格和字符串each
时才匹配浮点,但不将该空格和each
包含在匹配中。
然后,我们返回匹配字符串,其中包含MatchObject.group(0)
,请按照。尝试:
\b(([1-9][0-9]*)?[0-9]\.[0-9]+)\b
与现实相匹配
\b(([1-9][0-9]*)?[0-9])\b
匹配简单
测试正则表达式的好地方:试试:
\b(([1-9][0-9]*)?[0-9]\.[0-9]+)\b
与现实相匹配
\b(([1-9][0-9]*)?[0-9])\b
匹配简单
测试正则表达式的好地方:有一个更精确的实数正则表达式:
“^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$”
还有一些检查这个regexp:
realnum=re.compile("^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$")
["yes" if realnum.match(test) else "no" for test in ["12", "+12", "-12", "-3.14", ".314e1", "+.01e-12", "+22.134e+2"]]
['yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes']
["yes" if realnum.match(test) else "no" for test in ["..12", "+-12", "-12.", "-3.14p", ".314e1.9", "+. 01e-12", "+22.134e"]]
['no', 'no', 'no', 'no', 'no', 'no', 'no']
有一个更精确的实数正则表达式:
“^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$”
还有一些检查这个regexp:
realnum=re.compile("^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$")
["yes" if realnum.match(test) else "no" for test in ["12", "+12", "-12", "-3.14", ".314e1", "+.01e-12", "+22.134e+2"]]
['yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes']
["yes" if realnum.match(test) else "no" for test in ["..12", "+-12", "-12.", "-3.14p", ".314e1.9", "+. 01e-12", "+22.134e"]]
['no', 'no', 'no', 'no', 'no', 'no', 'no']
您应该包括示例输入和输出。一些输入,expect输出示例将有助于澄清您的疑问OP询问正则表达式将匹配什么。“这是做什么用的?”诸如此类的东西你应该包括输入和输出的例子。一些输入,期望输出的例子将有助于澄清你的疑问——大概是正则表达式将匹配什么。“这是干什么用的?”这类事情关于
1.00000e-05
?是的,忘了。如果他需要,我可以很容易地把它添加到答案中。如果是在他的示例输入/输出中,我将修复解决方案是的,我忘记了额外的数字。谢谢,我认为这样做很好。如果这个匹配.5
和5.
?@Hyperboreus,我明确地写它是为了不处理这两个。那些数字的格式不正确。那10万E-05呢?是的,忘了。如果他需要,我可以很容易地把它添加到答案中。如果是在他的示例输入/输出中,我将修复解决方案是的,我忘记了额外的数字。谢谢,我认为这样做很好。如果这个匹配.5
和5.
?@Hyperboreus,我明确地写它是为了不处理这两个。这些数字的格式不正确。在Python中,您通常可以使用原始字符串表示法(也可能使用字符串格式):r“\d+(\。\d*)?(?=\s{})”。在那里格式化(每个)
。添加了原始字符串表示法。在Python中,您通常可以使用原始字符串表示法(可能还有字符串格式):r“\d+(\。\d*)?(?=\s{})”。格式(每个)
。添加了原始字符串表示法。