Hướng dẫn how extract specific data from string in python? - cách trích xuất dữ liệu cụ thể từ chuỗi trong python?

Tôi mới đến Python. Có một StringTokenizer trong Python? Tôi có thể làm nhân vật bằng cách quét và sao chép ký tự.

Tôi có chuỗi đầu vào sau

data = '123:Palo Alto, CA -> 456:Seattle, WA 789'

Tôi cần trích xuất hai lĩnh vực [thành phố, tiểu bang] từ chuỗi này. Đây là mã tôi đã viết

name_list = []
while i < len[data]]:
      if line[i] == ':':
          name = ''
          j = 0
          i = i + 1
          while line[i] != '-' and line[i].isnumeric[] == False:
             name[j] = line[i]   # This line gives error
             i = i + 1
             j = j + 1
          name_list.append[name]
      i = i + 1

Tôi nên làm gì?

Hỏi ngày 20 tháng 8 năm 2010 lúc 16:55Aug 20, 2010 at 16:55

4

data = '123:Palo Alto, CA -> 456:Seattle, WA 789'
citys = []
for record in data.split["->"]:
    citys.append[
        re.search[r":[?P[\w\s]+],\s*[?P[\w]+]",record]
        .groupdict[]
    ]

print citys

Gives:

name_list = []
while i < len[data]]:
      if line[i] == ':':
          name = ''
          j = 0
          i = i + 1
          while line[i] != '-' and line[i].isnumeric[] == False:
             name[j] = line[i]   # This line gives error
             i = i + 1
             j = j + 1
          name_list.append[name]
      i = i + 1
0

Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:25Aug 20, 2010 at 17:25

Nick Tnick tNick T

24.9k11 Huy hiệu vàng79 Huy hiệu bạc118 Huy hiệu đồng11 gold badges79 silver badges118 bronze badges

Tôi thực hiện, giả sử chuỗi luôn được định dạng theo ví dụ của bạn:

import re

data = '123:Palo Alto, CA -> 456:Seattle, WA 789'

name_list = []
r = re.compile["[\s?\d]|:"]
name_list += r.sub["", data].split[" ->"]
print name_list # Prints ['Palo Alto, CA', 'Seattle, WA']

Như một lưu ý về lỗi của bạn, chuỗi trống sẽ có độ dài 0, vì vậy chỉ mục 0 không tồn tại:

>>> s = ""
>>> len[s]
0

Tuy nhiên, bạn có thể kết nối các chuỗi trong Python với toán tử

name_list = []
while i < len[data]]:
      if line[i] == ':':
          name = ''
          j = 0
          i = i + 1
          while line[i] != '-' and line[i].isnumeric[] == False:
             name[j] = line[i]   # This line gives error
             i = i + 1
             j = j + 1
          name_list.append[name]
      i = i + 1
1, như vậy:

>>> s += "Some"
>>> s += " Text"
>>> print s
Some Text

Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:14Aug 20, 2010 at 17:14

Eldarerathiseldarerathiseldarerathis

34,9k10 Huy hiệu vàng89 Huy hiệu bạc93 Huy hiệu Đồng10 gold badges89 silver badges93 bronze badges

Bạn luôn có thể sử dụng một biểu thức thông thường, nếu bạn muốn:

name_list = []
while i < len[data]]:
      if line[i] == ':':
          name = ''
          j = 0
          i = i + 1
          while line[i] != '-' and line[i].isnumeric[] == False:
             name[j] = line[i]   # This line gives error
             i = i + 1
             j = j + 1
          name_list.append[name]
      i = i + 1
2. Nó không đẹp, nhưng nó sẽ hoàn thành công việc. Giả sử chuỗi để khớp là chuỗi kiểm tra bạn đã có.

import re

for s in string_to_match.split["->"]:
    m = re.match[r"\d+:[\w+],\s[\w+]", s]
    city = m.group[1]
    state = m.group[2]

Cú pháp có thể là một chút tắt, nhưng ý tưởng chung là có.

Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:09Aug 20, 2010 at 17:09

PatpatPat

2.2033 huy hiệu vàng24 Huy hiệu bạc33 Huy hiệu đồng3 gold badges24 silver badges33 bronze badges

Giả sử rằng bạn luôn có chuỗi được định dạng như hiển thị bạn có thể làm:

cityState = []
for line in data.split['->']:
    cityState.append[{'city':city=line.strip[].split[','][0].split[':'][1],
                     'state':state=line.strip[].split[','].split[' '][1]}]

Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:04Aug 20, 2010 at 17:04

Davedavedave

12.2k10 Huy hiệu vàng42 Huy hiệu bạc58 Huy hiệu Đồng10 gold badges42 silver badges58 bronze badges

Bạn có thể sử dụng Regex. Đây là regex xấu xí của tôi, bạn có thể làm tốt hơn

inputStr = '123:Palo Alto, CA -> 456:Seattle, WA 789';
m = re.search['.*:[.*],[.*]->.*:[.*],\s*[\S{2}]', inputStr]
print "City1=" + m.group[1]
print "State1=" + m.group[2]
print "City2=" + m.group[3]
print "State2=" + m.group[4]   

Sản xuất

City1=Palo Alto
State1= CA 
City2=Seattle
State2=WA

Đã trả lời ngày 20 tháng 8 năm 2010 lúc 17:10Aug 20, 2010 at 17:10

Bwawokbwawokbwawok

14.4K7 Huy hiệu vàng31 Huy hiệu bạc43 Huy hiệu đồng7 gold badges31 silver badges43 bronze badges

Bài Viết Liên Quan

Chủ Đề