Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式不';t将字符串与括号和\t匹配_Python_Regex - Fatal编程技术网

Python 正则表达式不';t将字符串与括号和\t匹配

Python 正则表达式不';t将字符串与括号和\t匹配,python,regex,Python,Regex,我正在使用这段代码使用正则表达式拆分字符串 suffixes = "(adj\.|adv\.|pron\.|num\.|num\.-m|conj\.|part\.|aux\.|prep\.|n\.|v\.|m\.)" regex = f'^(\w+?)((?:{suffixes}) .*)$' result = re.sub(regex, "\1#\2", re.escape(word), re.UNICODE).split("#")

我正在使用这段代码使用正则表达式拆分字符串

suffixes = "(adj\.|adv\.|pron\.|num\.|num\.-m|conj\.|part\.|aux\.|prep\.|n\.|v\.|m\.)"
regex = f'^(\w+?)((?:{suffixes}) .*)$'
result = re.sub(regex, "\1#\2", re.escape(word), re.UNICODE).split("#")
这段代码几乎适用于我所有的字符串,但我面临着这两个字符串的问题:
'qiān\tnum。千分之一
'jiánm。(用于衣服和其他物品)件'
。似乎模式不匹配,我想是因为特殊字符
\t
()


关于Unicode(str)模式的
\t
\w所述
\t
我的预期结果

匹配Unicode单词字符;这包括大多数 可以是任何语言中单词的一部分,也可以是数字和 强调。如果使用了ASCII标志,则仅匹配[a-zA-Z0-9]


\t
不是可以作为word一部分的字符。所以你需要添加它。尝试使用
([\t\w]+?)
替换
(\w+?)
,我相信您的数据是通过某些API损坏的。轻松修复:如果您不希望传入字符串中出现和选项卡,请将所有选项卡替换为
t

使用

重新导入
后缀=r“(?:adj\.adv\.pron\.num\.num\.-m | conj\.part\.aux\.prep\.n\.v\.m\)”
regex=fr'^(\w+?)((?:{后缀})。*)$'
对于['qiān\tnum.000','jiánm.(用于衣服和其他物品)片段']中的句子:
结果=重新搜索(正则表达式,句子.replace('\t','t'))
如果结果为:
打印(result.groups())

结果

('qiānt', 'num. thousand')
('jiàn', 'm. (used for clothes among other items) piece')

为什么
re.escape(word)
?您还使用
re.UNICODE
作为计数参数。使用
flags=re.UNICODE
,或者简单地将其删除,这在Python 3中是多余的。此外,在replacement@WiktorStribiżew感谢您提醒我使用
re.escape(word)
,我删除了转义,现在只删除了第一个字符串(使用
\t
)不起作用你也可以把它缩短一点,也许可以匹配制表符
([\w\t]+)((?:ad[jv]| pron | num(?-m)?conj | part | aux | prep |[nvm])。
你不必匹配字符
因为您将
#
放在组1和组2之间,然后在
#
上再次拆分结果,请检查。我想您不需要
re.sub
re.search
就可以了。现在还不太清楚为什么要在组1中包含一个选项卡(空白)。如果有更多的空格(除了常规空格以外,我都懂),那该怎么办?