gpt4 book ai didi

python - 如何为多次出现的分隔字符串编写正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:32 24 4
gpt4 key购买 nike

我可以获得多个以 $startMsg$ 开头并以 $endMsg$ 结尾的字符串。所以以下是可接受的和 Not Acceptable :

  1. $startMsg$abcd$endMsg$:允许
  2. $startMsg$abcd$endMsg$aaa : 不允许,因为在 $endMsg$ 之后有 aaa
  3. 期待 $startMsg$,但只找到 $endMsg$。
    $startMsg$abcd$endMsg$xyz$endMsg$:不允许
  4. 未找到匹配的 $endMsg$。
    $startMsg$abcd$endMsg$xyz$startMsg$:不允许
  5. $startMsg$abcd$endMsg$xyz$startMsg$dad$endMsg$:允许
  6. 在 $startMsg$ 之前找到 $endMsg$。
    $startMsg$abcd$endMsg$xyz$endMsg$dad$startMsg$:不允许
  7. aaa$startMsg$abcd$endMsg$ :不允许,因为在 $startMsg$
  8. 之前有 aaa

我试过这样的:

 ^((\$startMsg\$[^(\$startMsg\$>>)(\$endMsg\$)]*\$endMsg\$))*$

我可以获得多个以 $startMsg$ 开头并以 $endMsg$ 结尾的字符串。所以以下是可接受的和 Not Acceptable :

  1. $startMsg$abcd$endMsg$:允许
  2. $startMsg$abcd$endMsg$aaa : 不允许,因为在 $endMsg$ 之后有 aaa
  3. 期待 $startMsg$,但只找到 $endMsg$。
    $startMsg$abcd$endMsg$xyz$endMsg$:不允许
  4. 未找到匹配的 $endMsg$。
    $startMsg$abcd$endMsg$xyz$startMsg$:不允许
  5. $startMsg$abcd$endMsg$xyz$startMsg$dad$endMsg$:允许
  6. 在 $startMsg$ 之前找到 $endMsg$。
    $startMsg$abcd$endMsg$xyz$endMsg$dad$startMsg$:不允许
  7. aaa$startMsg$abcd$endMsg$ :不允许,因为在 $startMsg$
  8. 之前有 aaa

我试过这样的:

 ^((\$startMsg\$[^(\$startMsg\$>>)(\$endMsg\$)]*\$endMsg\$))*$
  • ^ at start: 字符串的开头
  • \$:转义$
  • $ at end:字符串结尾

但这似乎很不正确。

但这似乎很不正确。我如何在 Python 中执行此操作?

[^(\$startMsg\$>>)(\$endMsg\$)]* 是否允许匹配任何不包含 $startMsg$$endMsg$。似乎是这样,不是吗?但是那么我应该如何在不完成正则表达式的情况下做到这一点呢?

或者这可以简单地用正则表达式撤销,因为它与下推自动机相关,因此绝对不能用有限的自动/正则表达式撤销。

最佳答案

检查此正则表达式,它适用于您提到的示例。

^(\$startMsg\$)((\w)*(\$endMsg\$\w+\$startMsg\$)*(\w)*)*(\$endMsg\$)$

如果开始和结束之间除了字符之外还有任何其他内容,请更改 \w

然后,如果您只想获取字符串开头和结尾之间的字符,请在顶部应用以下正则表达式

(?<=\$startMsg\$)\w+(?=\$endMsg\$)

这将列出给你的字符。

关于python - 如何为多次出现的分隔字符串编写正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52539808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com