Python 匹配字符(如果不在括号之间)

Python 匹配字符(如果不在括号之间),python,regex,python-3.x,Python,Regex,Python 3.x,给定字符串 apple bottom cotton dog (eagle fox gut) horse 我想匹配每个空格字符,除了括号之间的空格字符。在上面的示例中,这将是除“fox”之前和之后之外的所有空格 我试过了 \(.*\)|( +) 这让我在第一组中找到了我想要的匹配项,但是完整匹配项包括插入字符串。我正在尝试使用pythons正则表达式拆分方法在这些空间上进行拆分,这似乎不支持在单个组上进行拆分。尝试以下操作:([](?![^(]*\))(在此处尝试:) 解释: 捕获所有: [

给定字符串

apple bottom cotton dog (eagle fox gut) horse
我想匹配每个空格字符,除了括号之间的空格字符。在上面的示例中,这将是除“fox”之前和之后之外的所有空格

我试过了

\(.*\)|( +)

这让我在第一组中找到了我想要的匹配项,但是完整匹配项包括插入字符串。我正在尝试使用pythons正则表达式拆分方法在这些空间上进行拆分,这似乎不支持在单个组上进行拆分。

尝试以下操作:
([](?![^(]*\))
(在此处尝试:)

解释:

捕获所有:

  • []
    -匹配单个空格字符。character类是不必要的,但它使空间显式,因为它位于模式的开头,可能看起来是无意的
  • (?![^(]*\)
    消极前瞻;声明空格(
    []
    )后面没有以下内容:
    • [^(]*
      匹配任何数量的非
    • \)
      匹配单个

我会尝试将第一个选项条款设置为非捕获:

(?:\(.*\))|( +)
具有文本功能:

c = "apple bottom cotton dog (eagle fox gut) horse"
txtfilter = c[:]+"()"

result = []
while "(" in txtfilter:
    positionInit = txtfilter.find("(")
    extract_first = txtfilter[:positionInit]
    result.extend(extract_first.split())
    positionEnd = txtfilter[positionInit:].find(")")+positionInit+1
    result.append(txtfilter[positionInit:positionEnd])
    txtfilter = txtfilter[positionEnd:]

print result[:-1]
输出:

[“苹果”,“底部”,“棉花”,“狗”,“鹰-狐肠”,“马”]

说明:

苹果底棉狗

(鹰狐内脏)

()


非正则表达式的解决方案。这只适用于包含一组
()
的句子。您可以做的是从左到
s.index(“(”)
,然后从右,反转到
s.index”)
。它将称为
x
y
的外部部分断开。然后,为了抓取
(eagle-fox-gut)
,您从这些索引中创建了一个片段,除了右端的一个额外片段,因为它不包含在内。在我们组合
x.split()
之后,第一部分单词的列表作为项目,
y[:-1]。split()
,与
y
相同,但我们必须将其反向,并且
[z]
。这只适用于这种特殊情况,任何更多的
()
集都无法正确使用
.index()

s = 'apple bottom cotton dog (eagle fox gut) horse'
x = s[: s.index(' (')]
y = s[: s.index(')'):-1]
z = s[s.index('('): s.index(')')+1]
res = x.split() + y[::-1].split() + [z]
print(res)
# ['apple', 'bottom', 'cotton', 'dog', 'horse', '(eagle fox gut)']

您的目标只是将空格放入列表中吗?或者获取他们的索引,等等?这是将每个单词分成一个列表,如下所示:[苹果,底部,棉花,狗,(鹰狐内脏),马]它也必须是正则表达式?它不需要是正则表达式解决方案。我认为正则表达式是最合乎逻辑的解决方案。我喜欢这个解决方案,但是这个句子可能没有或更多的附加语句。糟糕的是,我应该在问题中澄清这一点:python的re.split行为不仅返回单词“apple”、“bottom”、“cotton”等,还返回它们之间的空格?或者这与这个正则表达式有关