![](/img/trans.png)
[英]How to retrieve substring form a string using regular expression in python
[英]How to retrieve a substring from my string?
字符串变量myvar
可以具有以下值:
261.30 (NM) / 300.76 (MI) / 483.93 (KM)
952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)
我需要提取数字483.93
和1,763.61
。 这些数字应转换为浮点数或向上舍入为整数。
这是我试过的:
mylar = "261.30 (NM) / 300.76 (MI) / 483.93 (KM)"
int(myvar[28:-8])
它适用于第一种情况( 261.30 (NM) / 300.76 (MI) / 483.93 (KM)
)。 但在952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)
情况下它失败了。 有没有通用的解决方案?
您可以使用此正则表达式检测字符串中的最后一个数字并将其放在group1中,
([^ ]*)[^\d]*$
然后使用以下python代码,您可以将其转换为float或int。 我将它转换为float,因为它们是十进制值,但您可以轻松地将它们转换为int。
import re
arr = ['261.30 (NM) / 300.76 (MI) / 483.93 (KM)','952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)']
for s in arr:
val = re.search(r'([^ ]*)[^\d]*$', s)
floatval = float(re.sub(r',','',val.group(1)))
print('Float value: ' + str(floatval))
print('Int value: ' + str(int(floatval)))
打印,
Float value: 483.93
Int value: 483
Float value: 1763.61
Int value: 1763
使用单个re.search
功能,无需任何替换:
import re
myvar = '952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)'
num = re.search(r'\/\s+(\d+),?(\d+\.\d+)\s+\(KM\)', myvar)
if num:
num = float(num.group(1) + num.group(2))
print(num)
输出:
1763.61
你也可以通过只使用split()来实现同样的目的
str1="261.30 (NM) / 300.76 (MI) / 483.93 (KM)"
last_num_string=str1.split('/')[2].split('(')[0]
last_num_float=float(last_num_string)
print(last_num_float)
在这种情况下我要做的是创建一个值列表,我可以从中提取任何值。
myvar2 = myvar.replace("/", "").replace(",", "")
myvar2 = myvar2.split()
# This gives a list like this: ["261.30","(NM)","300.76","(MI)","483.93","(KM)"]
myfloat = float(myvar[4]) # This will return 483.93 on the first string and 1,763.61 on the second.
你可以用正则表达式来做。
import re
target = '952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)'
regex = r'.* \(NM\) \/ .* \(MI\) \/ (.*) \(KM\)'
res_str = re.findall(regex, target)
float_str = res_str[0].replace(',', '')
result = float(float_str)
import re
m="261.30 (NM) / 300.76 (MI) / 483.93 (KM)"
print(float(re.split('\/',re.sub(',','',m))[2][:-5]))
由于值后跟(KM)
您可以使用正向前瞻:
\S+(?= \(KM\))
\\S+
匹配1+非空白字符 (?= \\(KM\\))
正面检查右边的是空格和(KM) 例如:
regex = r"\S+(?= \(KM\))"
strings = ["261.30 (NM) / 300.76 (MI) / 483.93 (KM)", "952.27 (NM) / 1,096.09 (MI) / 1,763.61 (KM)"]
for s in strings:
matches = re.search(regex, s)
if matches:
print(float(matches.group().replace(',', '')))
那会给你:
483.93
1763.61
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.