给出字符串
apple bottom cotton dog (eagle fox gut) horse
除了括号之间的空格,我想匹配每个空格。在上面的示例中,这将是除“ fox”之前和之后的所有空格。
我尝试过
\(.*\)|( +)
这使我在第1组中获得了想要的匹配项,但是完整匹配项包括了括号字符串。我正在尝试使用pythons正则表达式split方法在这些空间上进行分割,这似乎不支持在单个组上进行分割。
答案 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')'
。这打破了称为x
和y
的外部部分。然后,要抓住(eagle fox gut)
,请从这些索引中创建一个切片,但在右端增加一个切片,因为它不包含端点。之后,我们将x.split()
,第一部分单词列表作为项y[::-1].split()
与y
组合在一起,但是我们必须将其 reverse 退回,然后将{{ 1}}。这仅适用于这种特殊情况,[z]
的更多集合将无法与()
一起正常工作。
.index()