Python regex,在目标字符串中搜索前缀

2024-09-29 19:16:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要在一个目标字符串中找到前缀列表(我希望将目标字符串中匹配索引的列表作为数组处理)。在

  • 我认为使用regex应该是最干净的方法。在
  • 考虑到我正在寻找“foo”模式,我想在目标字符串中检索诸如“foo”、“foo”、“foing”、“fooing”之类的单词
  • 考虑到我正在寻找模式“foo bar”,我想在目标字符串中检索“foo bar”、“foo bar”、“foo bar”、“foo baring”(它们仍然都作为前缀处理,对吗?)在

目前,在不同的场景下运行它之后,我的Python代码仍然不能工作。在

  • 我假设我必须使用^来匹配目标字符串(即前缀)中单词的开头。在
  • 我假设我必须使用类似于^[fF]的方法来对前缀的第一个字母不区分大小写。在
  • 我假设我应该使用类似于“.*”的东西来让regexp的行为像一个前缀。在
  • 我假设我应该使用\prefix1 | prefix2 | prefix3**来放入**逻辑或模式中的许多不同前缀进行搜索。在

以下源代码无法工作,因为我错误地设置了txt_pattern。在

import re

#              '            '           '            '                     '             '           '
txt_str = "edb foooooo jkds Fooooooo kj fooing jdcnj Fooing ujndn ggng sxk foo baring sh foo Bar djw Foo";
txt_pattern = ''#???

out_obj = re.match(txt_pattern,txt_str)
if out_obj:
   print "match!"
else:
   print "No match!"
  1. 我错过了什么?

  2. 我应该如何设置txt_pattern

  3. 你能给我推荐一个好的教程最少的工作示例?目前,来自Google搜索的第一页的标准教程非常长且详细,而且不太容易理解。

谢谢!在


Tags: 方法字符串retxt目标列表foomatch
3条回答
>>> s = 'Foooooo jkds Fooooooo kj fooing jdcnj Fooing ujndn ggng sxk foo baring sh foo Bar djw Foo'
>>> regex = '((?i)(foo)(\w+)?)'
>>> compiled = re.compile(regex)
>>> re.findall(compiled, s)
[('Foooooo', 'Foo', 'oooo'), ('Fooooooo', 'Foo', 'ooooo'), ('fooing', 'foo', 'ing'), ('Fooing', 'Foo', 'ing'), ('foo', 'foo', ''), ('foo', 'foo', ''), ('Foo', 'Foo', '')]

(?i)->;不区分大小写
(foo)->;group1匹配foo
(\w+)->;group2每隔一个单词字符匹配一次

^{pr2}$

I am assuming I have to use ^ to match the beginning of a word in a target string (i.e. a prefix).

不,^是一个只匹配字符串开头的锚点。您可以改为使用\b,这意味着一个词的边界(但是记住要在字符串文本中转义反斜杠,或者使用原始字符串文本)。在

您还必须使用re.search而不是re.match,因为后者只检查字符串的开头,而前者搜索字符串中任何位置的匹配项。在

正则表达式是错误的方法。首先,将字符串解析为一个字符串列表,每个项目包含一个单词。然后使用带过滤器的列表理解。字符串上的split方法是获取单词列表的好方法,然后您可以简单地执行[item for item in wordlist if item.startswith("foo")]

当人们只需要一些字符串方法,如splitpartitionstartswith和一些python列表理解或生成器时,人们花了很长时间使用复杂的regex来破解效率低下的代码。在

正则表达式有它们的用途,但简单的字符串解析不是其中之一。在

相关问题 更多 >

    热门问题