如果不在圆括号之间,则匹配字符

时间:2018-10-08 23:56:35

标签: python regex python-3.x

给出字符串

apple bottom cotton dog (eagle fox gut) horse

除了括号之间的空格,我想匹配每个空格。在上面的示例中,这将是除“ fox”之前和之后的所有空格。

我尝试过

\(.*\)|( +)

这使我在第1组中获得了想要的匹配项,但是完整匹配项包括了括号字符串。我正在尝试使用pythons正则表达式split方法在这些空间上进行分割,这似乎不支持在单个组上进行分割。

4 个答案:

答案 0 :(得分:0)

尝试类似的方法:([ ](?![^(]*\)))(在这里尝试:https://regex101.com/r/UNgliZ/2

解释:

捕获所有:

  • [ ]-匹配一个空格字符。字符类不是必需的,但是可以使该空间明确,因为它位于模式的开头,并且可能看起来不是故意的。
  • (?![^(]*\))负前行;断言空格([ ])后面没有:
    • [^(]*匹配任意数量的非(的字符
    • \)匹配单个)

答案 1 :(得分:0)

我会尝试使第一选项子句不被捕获:

(?:\(.*\))|( +)

答案 2 :(得分:0)

具有文本功能:

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]

输出:

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

说明:

苹果底棉狗

<-extract_first块->

(鹰狐肠)

(<-附加->)

<-重复过程->

答案 3 :(得分:0)

非正则表达式解决方案。这仅适用于一组()的句子。您可以做的是从左向s.index(' (')切,然后从右反向切到s.index')'。这打破了称为xy的外部部分。然后,要抓住(eagle fox gut),请从这些索引中创建一个切片,但在右端增加一个切片,因为它不包含端点。之后,我们将x.split(),第一部分单词列表作为项y[::-1].split()y组合在一起,但是我们必须将其 reverse 退回,然后将{{ 1}}。这仅适用于这种特殊情况,[z]的更多集合将无法与()一起正常工作。

.index()