【问题标题】:How to match a jumbled string using regular expression如何使用正则表达式匹配混乱的字符串
【发布时间】:2024-05-21 03:30:02
【问题描述】:

我想解决一个我知道字符串输出的所有内容的情况..但我不确定输出中内容的顺序..

比如说,我输出的预期内容是['this','output','can','be','jumbled','in','any','order']..

输出可以是'this can in any order jumbled output be',或者'this order in any can output jumbled be'

如何在python中编写正则表达式来解决这种情况??

【问题讨论】:

  • 你是说你需要排列吗?请澄清,因为我不明白你的问题
  • 是的,对..我的输出可能包含给定单词集的所有排列...
  • 您要解决的实际问题是什么,为什么您认为正则表达式是解决问题的正确方法?

标签: regex string python-3.x


【解决方案1】:

实际上是可行的。例如使用^(?=.*this)(?=.*output)(?=.*can)(?=.*be)(?=.*jumbled)(?=.*in)(?=.*any)(?=.*order)

对于每个单词,我们简单地将其包含在一个正向前瞻中(断言后面的内容可以从当前位置匹配),之前出现的任何字符。

Demo.

我不是 python 专家,但我相信你可以动态构建它。

【讨论】:

  • awesome.. 它不只满足一种情况.. 说我的字符串是“这个输出可以按其他任何顺序混乱”然后我希望 regExp 失败,因为“其他”这个词' 不应该出现在输出字符串中。但是 regExp 没有进行严格的检查。
【解决方案2】:

恐怕我无法帮助 Python 进行处理 - 您看到的 Python 是我使用的正则表达式工具的建议。您的问题也不清楚您是否需要每个预期单词的匹配,或者单个匹配的单词是否也符合条件......所以这些细节将作为作业留给感兴趣的读者;-)

以下建议可帮助您入门:

reobj = re.compile("this|output|can|be|jumbled|in|any|order", re.VERBOSE | re.DOTALL)
match = reobj.search(subject)
if match:
    # match start: match.start()
    # match end (exclusive): match.end()
    # matched text: match.group()
else:
    # Match attempt failed

【讨论】: