1

我有一个这样的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 所以我们怎么能用 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)

谢谢你!

4

5 回答 5

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",(]除空格、引号、逗号或左括号外的一个字符
  • [^",(]*除引号、逗号或左括号之外的零个或多个字符
  • \(左括号(必须用 \ 转义,因为它在正则表达式中有特殊含义)
  • [^)]*除右括号外的零个或多个字符
  • \)右括号
于 2013-03-31T22:16:09.827 回答
2

使用CSV 模块并将逗号指定为分隔符。

于 2013-03-31T20:40:42.130 回答
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

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

于 2013-03-31T20:31:52.083 回答
0
  1. 从文本文件中去掉引号。
  2. 使用“,”将字符串拆分为列表
  3. 从http://docs.python.org/2/library/re.html学习和使用正则表达式,提取每个列表元素的名称和位置。
于 2013-03-31T20:37:47.663 回答
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.

于 2013-04-26T19:18:25.630 回答