我有一个这样的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)
谢谢你!
答案 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)
答案 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
。