import re
sequence = 'i have -0.03 dollars in my hand'
m = re.search('(have )(-\w[.]+)( dollars\w+)',sequence)
print m.group(0)
print m.group(1)
print m.group(2)
寻找在两次出现之间提取文本的方法。在这种情况下,格式为'我有'后跟 - 浮点数,然后是'美元\ w +'
如何使用re.search提取此浮点数? 为什么这些小组不这样做?我知道我可以通过调整来与这些团队合作。任何帮助将不胜感激
我以为我可以使用带有paranthesis的组但我得到了一个错误
答案 0 :(得分:2)
-\w[.]+
与-0.03
不匹配,因为[.]
字面匹配.
,因为.
位于[...]
内。
\w
之后的 dollars
也会阻止该模式与sequence
匹配。 dollars
之后没有单词字符。
使用(-?\d+\.\d+)
作为模式:
import re
sequence = 'i have -0.03 dollars in my hand'
m = re.search(r'(have )(-?\d+\.\d+)( dollars)', sequence)
print m.group(1) # captured group start from `1`.
print m.group(2)
print m.group(3)
BTW,捕获的组号从1
开始。 (group(0)
返回整个匹配的字符串)
答案 1 :(得分:2)
你的正则表达式不符合以下几个原因:
-
(在这种情况下可以,一般都有问题).
之前的一位数字(它甚至允许使用A
之类的非数字。)dollars
后立即需要一个或多个字母数字。所以它匹配"I have -X.... dollarsFOO in my hand"
但不匹配"I have 0.10 dollars in my hand"
。
此外,将固定文本放入捕获括号中是没有用的。
m = re.search(r'\bhave (-?\d+\.\d+) dollars\b', sequence)
会更有意义。
答案 2 :(得分:0)
之前已经在许多配方中提出过这个问题。你正在寻找一个能找到数字的正则表达式。由于数字格式可能包括小数,逗号,指数,加号/减号和前导零,因此您需要一个强大的正则表达式。幸运的是,这个正则表达式已经为你编写。
请参阅How to extract a floating number from a string和Regular expression to match numbers with or without commas and decimals in text