使用奇怪unicode字符的Python正则表达式

使用奇怪unicode字符的Python正则表达式,python,Python,以下代码完成了我要执行的操作: one_sentence = lambda x: re.search(r'b|c|d', x) 以及以下各项: if re.search(r'P' + chr(8868), 'aP' + chr(8868)): print (True) 但我无法实现以下目标: if re.search(chr(8835)|chr(8868)|chr(8869), 'P' + chr(8868)): print (True) 我试图使之成为这样,如果chr(8

以下代码完成了我要执行的操作:

one_sentence = lambda x: re.search(r'b|c|d', x)
以及以下各项:

if re.search(r'P' + chr(8868), 'aP' + chr(8868)):
    print (True)
但我无法实现以下目标:

if re.search(chr(8835)|chr(8868)|chr(8869), 'P' + chr(8868)):
    print (True)

我试图使之成为这样,如果
chr(8835)
chr(8868)
chr(8869)
中的任何一个在字符串中,那么代码打印
True

,管道
字符在正则表达式中操作,它需要是模式字符串的一部分(正如您在第一个示例
re.search(r'b | c | d',x)
中所做的那样)。但是,您在这里将其用作Python运算符:

>>> re.search(chr(8835)|chr(8868)|chr(8869), 'P' + chr(8868))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for |: 'str' and 'str'
或者,如果愿意,可以使用
\uxxx
语法将unicode字符的十六进制值直接输入字符串,并直接包括管道:

>>> hex(8835)
'0x2283'
>>> hex(8868)
'0x22a4'
>>> hex(8869)
'0x22a5'
>>> 
>>> '\u2283|\u22a4|\u22a5'
'⊃|⊤|⊥'
>>> re.search('\u2283|\u22a4|\u22a5', 'P\u22a4')
<_sre.SRE_Match object; span=(1, 2), match='⊤'>
>>十六进制(8835)
“0x2283”
>>>十六进制(8868)
“0x22a4”
>>>十六进制(8869)
“0x22a5”
>>> 
>>>“\u2283 |\u22a4 |\u22a5”
'⊃|⊤|⊥'
>>>重新搜索('\u2283 |\u22a4 |\u22a5','P\u22a4')

您需要将管道制作成字符串
chr(8835)+‘|’+chr(8868)+‘|’+chr(8869)
要扩展Peter所说的内容,现在管道操作符充当位OR。谢谢,我非常感谢。
>>> hex(8835)
'0x2283'
>>> hex(8868)
'0x22a4'
>>> hex(8869)
'0x22a5'
>>> 
>>> '\u2283|\u22a4|\u22a5'
'⊃|⊤|⊥'
>>> re.search('\u2283|\u22a4|\u22a5', 'P\u22a4')
<_sre.SRE_Match object; span=(1, 2), match='⊤'>