如何使用Python拆分特定的逗号

时间:2013-03-31 20:22:38

标签: python

我有一个这样的txt文件:

"Adler; David L. (San Jose, CA)", 
"Albert; Richard D. (San Ramon, CA)", "Albert; Richard D. (San Ramon, CA) , Reyna; David L. (San Ramon, CA)", 
"Amano; Masaharu (Ibaraki, JP )"

这是一个人名和(他们的城市+他们的州)的文件。

现在我将不得不逐一分开每一条记录。

像这样:

Adler; David L. (San Jose, CA)

Albert; Richard D. (San Ramon, CA)

Albert; Richard D. (San Ramon, CA)

Reyna; David L. (San Ramon, CA)

Amano; Masaharu (Ibaraki, JP )

我怎么能意识到这一点? 我不熟悉re,所以我们怎么能用例如这样来解决这个问题呢? 也就是说,我们将通过以下索引对这个词进行分类,如两种逗号:

1

"Adler; David L. (San Jose, CA)", 
  "Albert; Richard D. (San Ramon, CA)"

成:

Adler; David L. (San Jose, CA)

Albert; Richard D. (San Ramon, CA)

2。Albert; Richard D. (San Ramon, CA) , Reyna; David L. (San Ramon, CA)

成:

Albert; Richard D. (San Ramon, CA)

Reyna; David L. (San Ramon, CA)
谢谢你!

5 个答案:

答案 0 :(得分:3)

正则表达式对此有好处。

txt='"Adler; David L. (San Jose, CA)", "Albert; Richard D. (San Ramon, CA)", "Albert; Richard D. (San Ramon, CA) , Reyna; David L. (San Ramon, CA)", "Amano; Masaharu (Ibaraki, JP )"'
import re
for s in re.findall(r'[^\s",(][^",(]*\([^)]*\)', txt):
    print s

打印

Adler; David L. (San Jose, CA)
Albert; Richard D. (San Ramon, CA)
Albert; Richard D. (San Ramon, CA)
Reyna; David L. (San Ramon, CA)
Amano; Masaharu (Ibaraki, JP )

在正则表达式中:

  • [^\s",(]除了空格,引号,逗号或左括号之外的一个字符
  • [^",(]*除引号,逗号或左括号外的零个或多个字符
  • \(左括号(必须通过\来转义,因为它在正则表达式中具有特殊含义)
  • [^)]*除右括号外的零个或多个字符
  • \)右括号

答案 1 :(得分:2)

使用CSV module并将昏迷指定为分隔符。

答案 2 :(得分:0)

如果您确定您的文件不包含任何与安全相关的内容,您可能只会这样做

exec("l = ["+text+"]")
print i for i in l

或者,对于正则表达式:

import re
res = re.findall("([A-Za-z]*?; [A-Za-z]+?( [A-Za-z]\.)?) \(([A-Za-z ]*?, [A-Z]*?)\)", text)
for i in res:
    name = i[0]
    if len(res) == 2: citystate = i[1]
    else: citystate = i[2]
    print name, citystate

只要城市和州的“)”之前没有结尾,那就应该有效。

答案 3 :(得分:0)

  1. 从文本文件中删除引号。
  2. 使用','
  3. 将字符串拆分为一个列表
  4. 学习&使用http://docs.python.org/2/library/re.html的正则表达式来提取名称&每个列表元素的位置。

答案 4 :(得分:0)

如果您不限于python,那么我建议awk是完美的:

$ awk '{$1=$1}1' FPAT="[[:alpha:]]+;[^)]+)" OFS="\n" file
Adler; David L. (San Jose, CA)
Albert; Richard D. (San Ramon, CA)
Albert; Richard D. (San Ramon, CA)
Reyna; David L. (San Ramon, CA)
Amano; Masaharu (Ibaraki, JP )

FPAT用于设置字段模式,在这种情况下,字段模式为

[[:alpha:]]+     # One or more alphabetic character
;                # Followed by a literal semi-colon
[^)]+            # Followed by one or more none ) characters 
)                # Followed by a ) 

OFS用于设置输出字段分隔符,这里我们使用换行符。

注意:这需要GNU awk