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

在Python中,如何编写一个正则表达式来匹配以字符串a开始但不以B结束的字符串

王英彦
2023-03-14

我有一些字符串,比如:

tool_abc
tool_abc_data
tool_xyz
tool_xyz_data
file_abc
file_xyz_data

我的目标是使用一个RegEx来匹配以tool_开始而不是以_data结束的所有字符串。我怎么写?

共有1个答案

顾超
2023-03-14

摘自https://docs.python.org/2/library/re.html#regular-expression-syntax:

(?<!...)
Matches if the current position in the string is not preceded by a match
for .... This is called a negative lookbehind assertion. Similar to positive 
lookbehind assertions, the contained pattern must only match strings of some
fixed length and shouldn’t contain group references. Patterns which start
with negative lookbehind assertions may match at the beginning of the string
being searched..

我认为您需要的regex是'^tool_.*$(?<!_data)':

>>> re.match('^tool_.*$(?<!_data)', 'tool_abc')
<_sre.SRE_Match object at 0x10ef4fd98>
>>> re.match('^tool_.*$(?<!_data)', 'tool_abc_data')
>>> re.match('^tool_.*$(?<!_data)', 'tool_abc_data_file')
<_sre.SRE_Match object at 0x10ef4fe00>
>>> re.match('^tool_.*$(?<!_data)', 'tool_abc_file')
<_sre.SRE_Match object at 0x10ef4fd98>
>>> re.match('^tool_.*$(?<!_data)', 'tool_abc_data')
>>> re.match('^tool_.*$(?<!_data)', 'abc_data')
>>> re.match('^tool_.*$(?<!_data)', 'file_xyz_data')
>>> re.match('^tool_.*$(?<!_data)', 'file_xyz')
 类似资料:
  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 我试图将字符串的起始字符和结束字符匹配为同一个元音。我的正则表达式在大多数情况下都能工作,但在其他情况下会失败: 样本输入: ,输出-false(有效) ,输出-true(有效) ,输出为true(有效) ,输出-true(无效) ,输出-true(无效)

  • 我想在Java中使用Regex提取某种字符串。我目前有这样的模式: 应该匹配以“a”开头、以“se”结尾的字符串。这不起作用。我错过了什么吗? 删除了模式末尾的 \n 行并将其替换为“$”:仍然没有匹配项。正则表达式从我这边看起来是合法的。 我想提取的是从临时字符串中提取的“a se”。

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

  • 我有一些xml文件,希望删除除特定字符串以外的所有内容。 StackOverflow上还有很多类似的问题,但都不适用于我的文件,在尝试了几个小时不同的正则表达式后,我想寻求帮助。 到目前为止,部分成功但并非完全成功的最接近的正则表达式是: xml文件的示例: 我使用regex101,因此可以将示例粘贴在那里,以了解为什么rex只能部分工作。简而言之,它与第一次出现的不匹配,但与第二次出现的匹配。我

  • 本文向大家介绍Python正则表达式匹配字符串中的数字,包括了Python正则表达式匹配字符串中的数字的使用技巧和注意事项,需要的朋友参考一下 1.使用“\d+”匹配全数字 代码: 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: 结果: ['479', '501', '870', '209', '213',