我在英语词典中有一个外语,我试图导入到SQL数据库中。此词典位于文本文件中,行如下所示:
field1 field2 [romanization] / definition 1 / definition 2 / definition 3 /
我在python中使用正则表达式来识别分隔符。到目前为止,我已经能够隔离每个分隔符,除了字段1和字段2之间的空间。
(?<=\S)\s\[|\]\s/(?=[A-Za-z])|/
#(?<=\S)\s\[ is the opening square bracket after field 2
#\]\s/(?=[A-Za-z]) is the closing square bracket after the romanization
#/ is the forward slashes in-between definitions.
#????????? is the space between field 1 and field two
答案 0 :(得分:2)
如果Python支持\K
构造,这将起作用
这个结构是一个可变长度的lookbehind的穷人版本。
# (?m)(?:^[^\s\[\]/]+\K\s|(?<=\S)\s\[|\]\s/(?=[A-Za-z])|/)
(?m)
(?:
^ [^\s\[\]/]+
\K
\s
|
(?<= \S )
\s \[
|
\] \s /
(?= [A-Za-z] )
|
/
)
显然,Python没有这种结构,但可能支持
使用他们的实验性 regex 模块进行可变长度的lookbehind&#。
http://pypi.python.org/pypi/regex
# (?m)(?:(?<=^[^\s\[\]/]+)\s|(?<=\S)\s\[|\]\s/(?=[A-Za-z])|/)
(?m)
(?:
(?<= ^ [^\s\[\]/]+ )
\s
|
(?<= \S )
\s \[
|
\] \s /
(?= [A-Za-z] )
|
/
)
答案 1 :(得分:0)
您可以尝试this regex,它会隔离所有字段和分隔符:
import re
preg = re.compile(r'^(?P<field1>\S+)(?P<delim1>\s+)'
r'(?P<field2>\S+)(?P<delim2>\s+)'
r'\[(?P<romanization>\S+)\](?P<delim3>\s+)'
r'/(?P<def1>[^/]+)/(?P<def2>[^/]+)/(?P<def3>[^/]+)')
lines = ['field1 field2 [romanization] /def 1/def 2/def 3/',
'Foo Bar [Foobar]\t/stuff/content/nonsense/']
for line in lines:
m = preg.match(line)
if m is not None:
print(m.groupdict())
例如,您的第一个分隔符将位于m.group('delim1')
。