Python 如何使用正则表达式仅隔离字符串中的第一个空格?

Python 如何使用正则表达式仅隔离字符串中的第一个空格?,python,regex,Python,Regex,我有一本从外语到英语的词典,我正试图将它导入sql数据库。此词典位于文本文件中,其行如下所示: field1 field2[罗马化]/definition 1/definition 2/definition 3/ 我在python中使用正则表达式来标识分隔符。到目前为止,我已经能够隔离除字段1和字段2之间的空格之外的所有分隔符 (?<=\S)\s\[|\]\s/(?=[A-Za-z])|/ #(?<=\S)\s\[ is the opening square bracket aft

我有一本从外语到英语的词典,我正试图将它导入sql数据库。此词典位于文本文件中,其行如下所示:

field1 field2[罗马化]/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
(?您可以尝试,它隔离所有字段和分隔符:

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())
重新导入
preg=re.compile(r'^(?P\S+)(-P\S+)
r'(?P\S+(?P\S+)
r'\[(?P\S+)\](?P\S+)
r'/(?P[^/]+)/(?P[^/]+)/(?P[^/]+))
行=['field1 field2[罗马化]/def 1/def 2/def 3/',
'Foobar[Foobar]\t/stuff/content/rhouse/']
对于行中的行:
m=预匹配(线)
如果m不是无:
打印(m.groupdict())

例如,您的第一个分隔符将位于
m.group('delim1')

如果Python支持
\K
构造,这将起作用。
这个结构是一个变长lookback的穷人版本

 # (?m)(?:^[^\s\[\]/]+\K\s|(?<=\S)\s\[|\]\s/(?=[A-Za-z])|/)

 (?m)
 (?:
      ^ [^\s\[\]/]+ 
      \K 
      \s 
   |  
      (?<= \S )
      \s \[
   |  
      \] \s /
      (?= [A-Za-z] )
   |  
      /
 )

#(?m)(?:^[^\s\[\]/]+\K\s|)(?您到底想做什么?我正在使用一个脚本将文本文件转换为sql数据库,但要执行此操作,我需要告诉脚本文本文件中的分隔符是什么。其中一个分隔符是第一个空格ie字段1[此处]field2虽然我不知道在正则表达式中键入什么来识别它。我希望正则表达式查询与行中的第一个空格相匹配。但是如果您要查找行中的第一个空格,有什么用?如果您知道有空格,正则表达式总是返回一个空格,那么为什么要在第一个位置查找它?不知为什么我没有理解您,对不起--对不起,我很糟糕在解释时。这是从termsql中提取的一行,该行通过围绕分隔符row=re.split(regex_delimiter,line.rstrip('\r\n').lstrip())在数据库中创建一行不幸的是,没有,反正也没有重新库。无论如何谢谢,虽然抱歉,是的,它会与他们的实验正则表达式模块。不幸的是,我没有足够的代表投票给这个答案。我应该能够编辑代码,以便使用此方法将工作,谢谢
 # (?m)(?:(?<=^[^\s\[\]/]+)\s|(?<=\S)\s\[|\]\s/(?=[A-Za-z])|/)

 (?m)
 (?:
      (?<= ^ [^\s\[\]/]+ )
      \s 
   |  
      (?<= \S )
      \s \[
   |  
      \] \s /
      (?= [A-Za-z] )
   |  
      /
 )