希望这篇文章能变得更好。
所以我被这个程序的这个功能卡住了,它将返回指定了某个关键字的整个单词。
ie -如果我告诉它在字符串"blah I=1mV blah blah etc?“中查找单词"I=”,那么它将返回找到它的整个单词,所以在本例中,它将返回I=1mV。
我尝试了一系列不同的方法,例如,
text = "One of the values, I=1mV is used"
print(re.split('I=', text))但是,这将返回没有i的相同字符串,因此它将返回
['One of the values, ', '1mV is used']如果我尝试正则表达式解决方案,我会遇到一个问题,数字可能超过1位,所以这段代码只有在数字是1位时才有效。如果I=10mV是该值,它将只返回1,但是如果我有两次/0-9,代码将不再只使用1值。
text = "One of the values, I=1mV is used"
print(re.findall("I=[/0-9]", text))
['I=1'] 当我尝试使用re.match时,
text = "One of the values, I=1mV is used"
print(re.search("I=", text))
<_sre.SRE_Match object at 0x02408BF0>检索单词(在本例中,我想检索I=1mV)并去掉字符串的其余部分的好方法是什么?
发布于 2012-04-04 10:37:24
更好的方法是先将文本拆分成单词:
>>> text = "One of the values, I=1mV is used"
>>> words = text.split()
>>> words
['One', 'of', 'the', 'values,', 'I=1mV', 'is', 'used']然后过滤单词以找到您需要的单词:
>>> [w for w in words if 'I=' in w]
['I=1mV']这将返回包含I=的所有单词的列表。然后我们可以只取找到的第一个元素:
>>> [w for w in words if 'I=' in w][0]
'I=1mV'完成了!我们可以做的是只查找第一个匹配项,而不是检查每个单词。为此,我们可以使用生成器表达式:
>>> next(w for w in words if 'I=' in w)
'I=1mV'当然,您可以调整if条件以更好地满足您的需求,例如,您可以使用str.startswith()检查单词是否以某个字符串开头,或者使用re.match()检查单词是否与某个模式匹配。
发布于 2012-04-04 12:22:38
使用字符串方法
根据记录,您使用I=作为分隔符将字符串一分为二的尝试几乎是正确的。您可以使用保留分隔符的str.partition(),而不是使用丢弃分隔符的str.split()。
>>> my_text = "Loadflow current was I=30.63kA"
>>> my_text.partition("I=")
('Loadflow current was ', 'I=', '30.63kA')使用正则表达式
更灵活、更健壮的解决方案是使用正则表达式:
>>> import re
>>> pattern = r"""
... I= # specific string "I="
... \s* # Possible whitespace
... -? # possible minus sign
... \s* # possible whitespace
... \d+ # at least one digit
... (\.\d+)? # possible decimal part
... """
>>> m = re.search(pattern, my_text, re.VERBOSE)
>>> m
<_sre.SRE_Match object at 0x044CCFA0>
>>> m.group()
'I=30.63'这说明了更多的可能性(负数、整数或十进制数)。
请注意以下的用法:
a* -零个或多个asa+ -至少一个aa? -“可选”-一个或零个as
带注释的
re.VERBOSE标志)-比非冗长的等效模式更容易理解上面的模式,正则表达式模式的I=\s?-?\s?\d+(\.\d+).r"..."而不是普通字符串"..." -意味着文字反斜杠不必转义。这里不需要,因为我们的模式不使用反斜杠,但是有一天你需要匹配C:\Program Files\...,到那一天你将需要原始字符串。练习
mA、A或kA单元相匹配?提示:"Alternation operator".发布于 2012-04-04 10:39:35
import re
text = "One of the values, I=1mV is used"
l = (re.split('I=', text))
print str(l[1]).split(' ') [0]如果您有多个I=,请对l中的每个奇数索引执行上述操作,因为0是第一个索引。
这是一个很好的方法,因为你可以写“其中一个值,使用了I= 1 1mv”,我猜你想要得到i是1 1mV。
顺便说一句,I是电流,其单位是安培,而不是伏特:)
https://stackoverflow.com/questions/10004194
复制相似问题