簡體   English   中英

如何從我的字符串中檢索子字符串?

[英]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.931,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

正則表達式演示 | Python演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM