当前位置: 首页 > 知识库问答 >
问题:

正则表达式不匹配带括号的字符串\t

公西永嘉
2023-03-14

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

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()

我的预期结果['qiān\t','no。千']['jiàn','m.(用于衣服和其他物品)片']

共有2个答案

盖泽宇
2023-03-14

\t视为re。docs表示Unicode(str)模式的\w

匹配Unicode单词字符;这包括可以作为任何语言中单词的一部分的大多数字符,以及数字和下划线。如果使用ASCII标志,则仅匹配[a-zA-Z0-9_]。

\t不是可以作为word一部分的字符。所以你需要添加它。尝试替换(\w?) 使用([\t\w]?)

燕建中
2023-03-14

我相信你的数据是通过某种API损坏的。轻松修复:如果您不希望传入字符串中出现和选项卡,请将所有选项卡替换为t

使用

import re
suffixes = r"(?:adj\.|adv\.|pron\.|num\.|num\.-m|conj\.|part\.|aux\.|prep\.|n\.|v\.|m\.)"
regex = fr'^(\w+?)((?:{suffixes}) .*)$'

for sentence in ['qiān\tnum. thousand', 'jiànm. (used for clothes among other items) piece']:
  result = re.search(regex, sentence.replace('\t', 't'))
  if result:
    print(result.groups())

请参阅Python代码。

结果:

('qiānt', 'num. thousand')
('jiàn', 'm. (used for clothes among other items) piece')
 类似资料:
  • 上面的正则表达式返回括号之间的文本。 如: 如何重写上面的正则表达式,所以我提供了一个类似的字符串,它将返回。i、 e带括号的部分,其中包含大括号中的字符串。

  • 问题内容: 匹配字符串中的’(’的正则表达式是什么? 以下是场景: 我有一串 我想使用正则表达式拆分字符串。为此,我正在使用 但是我收到以下异常。 转义似乎不起作用。 问题答案: 两种选择: 首先,你可以使用转义 回 斜线- 另外,由于它是单个字符,因此您可以将其放入不需要转义的字符类中-

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 我正在尝试匹配以下正则表达式: 换句话说,一个单词边界后跟上面的任何字符串(可选地跟一个句点字符),后面跟一个单词边界。 我也在regex101上尝试过这一操作,但与数仍然不匹配:https://regex101.com/r/klkmwl/1 转义符并没有什么区别,我已经尝试使用十六进制转义序列来代替和符(如本问题所建议的)。为什么这不匹配?

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 本文向大家介绍正则表达式匹配括号外的符号及数据,包括了正则表达式匹配括号外的符号及数据的使用技巧和注意事项,需要的朋友参考一下 正则表达式匹配括号外的符号 [\\?!/\\.,\\s]+(?=[^\\)]*(\\(|$)) 将括号外的?!/.,和空格(连续多个时同时)匹配 如 结果: sdfsdf sdlfksd sdf fsdf&sdf(s:1,g:1) sdfsd sdf sdfl asdf