试图将一个string分成几个独立的类别

我在单个excel列中有2000多个string。 每个单元格都有一个遵循以下格式的string:

“BROOKDALE WOODSTOCK 1000 Professional Way Woodstock,GA 30188(678)341-5720 www.brookdale.com”

我想把这个string分成4个不同的类别。 我还包括了一个想法,我怎样使用string格式作为分隔符。

  1. 企业名称(全部是大写字母(BROOKDALE WOODSTOCK)中的string部分)
  2. 地址(从机构名称开始,以“GA 30 ###”(其中#是任意数字)子string结束的地址)
  3. 电话号码(将在地址后面开始并按照格式(###)### – ####)
  4. 网站地址(将在电话号码之后开始,以“www”开头,直到string结尾)

所以理想情况下,从上面的例子来看,我会有一个脚本来把它变成:

BROOKDALE WOODSTOCK,1000 Professional Way Woodstock,GA 30188,(678)341-5720,www.brookdale.com

有没有人有一个想法,我可以做到这一点? 我应该将其导出为.csv文件并在Python中执行此操作。 有没有一种方法,我可以在Excel本身完成这个? 也会在城市和州(伍德斯托克,乔治亚州)之间的string预先存在的逗号影响.csv文件? 我应该如何解决这个问题?

提前致谢。

对于你的行是在A1使用这些公式

  • B1=TRIM(LEFT(A1,FIND({"1","2","3","4","5","6","7","8","9","0"},A1)-1))

  • C1=TRIM(MID(A1,LEN(B1)+1,FIND("GA 30",A1)-LEN(B1)))

  • D1=MID(A1,FIND("(",A1),13)

  • E1=MID(A1,FIND("www",A1),999)

请注意,假设GA 30 (www除了在OP中指定的地方以外,不会在string的任何其他地方出现

以下(粗略的)提纲是您要查找内容的“天真”实现。 然而:

  • 鉴于所提供的数据稀less,它可能在某个时候失败
  • 这将假设从一个文件中读取“逐行”,我不完全确定如何转换你的Excel文件。
  • 根据数据的一致性,这里和那里可能会有几个“stream氓”空白
  • 整个“comma-as-part-of-an-adress-stored-in-a-.csv-file”问题仍然没有解决

这里是:

 import re # Input sample = "BROOKDALE WOODSTOCK 1000 Professional Way Woodstock, GA 30188 (678) 341-5720 www.brookdale.com" # Split the line around its blank spaces lst = sample.split(' ') # Create an empty list for each desired category part1 = [] part2 = [] part3 = [] part4 = [] # Now to put each element into the right category while lst: # Part 1 while lst: e = lst.pop(0) if not re.search("[0-9]", e): part1.append(e) else: break # Part 2 part2.append(e) while lst: e = lst.pop(0) if not re.search("\(", e): part2.append(e) else: break # Part 3 part3.append(e) while lst: e = lst.pop(0) if not re.search("w", e): part3.append(e) else: break # Part 4 part4 = [e] + lst # For "proof of concept" purposes, join the fields and print them out part1 = " ".join(part1) part2 = " ".join(part2) part3 = " ".join(part3) part4 = " ".join(part4) print("%s\n%s\n%s\n%s" % (part1, part2, part3, part4)) 

输出:

 BROOKDALE WOODSTOCK 1000 Professional Way Woodstock, GA 30188 (678) 341-5720 www.brookdale.com 

如果你的2000地址都遵循这种格式,你可以使用正则expression式:

 >>> import re >>> s="BROOKDALE WOODSTOCK 1000 Professional Way Woodstock, GA 30188 (678) 341-5720 www.brookdale.com" >>> pat=r'^([AZ ]+)[ ](\d+[\w ]+,[ ]GA\s30\d\d\d)[ ](\(\d\d\d\)[ ]\d\d\d-\d\d\d\d)[ ](www[.\w]+)$' >>> ', '.join(re.findall(pat, s)[0]) 'BROOKDALE WOODSTOCK, 1000 Professional Way Woodstock, GA 30188, (678) 341-5720, www.brookdale.com'