0

这应该很容易使用捕获组,但我没有得到正确的单词。我一直在使用以下内容:

#Before
print(re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))',r'\1','A. & B.',flags=re.IGNORECASE))
A. & B.

#After
print(re.sub(r'(\&|\-|and)\s*\b([A-Za-z0-9]+)\b',r'\2','A. & B.',flags=re.IGNORECASE))
A. B.

字符串可以是以下之一:

A. - B.
A.-B.
A. & B.
A.&B.
A. AND B.

这个想法是在我之前/之后得到这个词,ampersand| hyphen | and我分成两个正则表达式来得到这两个词。在这个例子中, before 会得到 justA和 after B

为什么捕获组没有打印A,并且B在前面的示例中?

提前致谢 :)

4

2 回答 2

0

改为使用re.search()并在选项之一之前和之后对所需的单词进行分组&,-,and

text = re.search('(\w+)\.+\s*[\&*\-*AND*and*]*\s*(\w+)\.+', 'A. & B.')
print (text.groups())
于 2019-12-11T00:38:11.703 回答
0

对于十进制值 1 或 0x01 hex,该字符串'\1'是八进制的。

>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))','\1','A. & B.',re.IGNORECASE)
'\x01. & B.'

正则表达式需要转义反向引用。

这些替换字符串中的任何一个都引用捕获组 1
'\\r'

>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))','\\1','A. & B.',re.IGNORECASE)
'A. & B.'

或者,

r'\1'

>>> import re
>>> re.sub(r'\b([A-Za-z0-9]+)\b(?=\.?\s*(\&|\-|and))',r'\1','A. & B.',re.IGNORECASE)
'A. & B.'
于 2019-12-10T23:03:38.157 回答