gpt4 book ai didi

python - 了解正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 18:17:38 24 4
gpt4 key购买 nike

我正在尝试用 Python 制作一个解析器,我认为 RegExp 对于避免大量“if 语句”来检查输入是否正确非常有用。

我有以下表达式

for i | if i < 100 | increment i{
lots of lines of code each ending with;
};
  1. 我想检查第一个 i 是否以字母(小写或大写)开头;
  2. 那么它可以是任意数量的字母;
  3. 关注 |if 。我正在使用:
  4. 然后与第一个相同i (我不认为我可以存储第一个并检查是否相同?可以吗?)
  5. then 运算符和 |以及任意数量的数字。
  6. 然后是 4 个空格或 1 个制表符并以 ; 结尾
  7. 最后是};结束。

我有其中一些,但我无法将它们组合在一起。

这是我得到的,请指出我做错了什么。

到目前为止我得到了:

^for [a-z|A-Z]\w* \| if [a-z|A-Z]\w* [<|>|==|>=|<=] \d+ \| [increment|decrement] [a-z|A-Z]\w*{\n[ {4}|\t].*;\n};$

分割:

  • [a-z|A-Z]\w以字母(大写和小写)开头,后面可以跟任何数字字母。

  • [<|>|==|>=|<=]可能的运算符。

  • \d+任何数字。

  • [increment|decrement]这是一个不起作用,我想匹配这两个词中的任何一个。我尝试使用 \b^$ .

  • {\n括号区域的开始。

  • {\n[ {4}|\t].*;这也不起作用,{4}应匹配 4 个空格和 \t一个选项卡。

  • \n};$括号区域的末尾。

请指出我在使用此正则表达式时可能遇到的任何错误以及我正在寻找的目标。

编辑:

当我尝试匹配 @Barmar 正则表达式时,我没有得到任何结果。

测试代码如下:

import re
f = "for i | if i < 100 | increment i{\n\tlots of lines of code each ending with;\n};"

print re.findall("^for ([a-zA-z]\w*) \| if \1 (?:<|>|==|>=|<=) \d+ \| (?:increment|decrement) \1{"
"\n(?: {4}|\t]=).*;\n};$",f)

最佳答案

尝试

^for ([a-zA-z]\w*) \| if \1 (?:<|>|==|>=|<=) \d+ \| (?:increment|decrement) \1{\n(?: {4}|\t]=).*;\n};$

我将您的所有 [...] 组更改为 (?:...),这是一个非捕获组。

我在 forincrement|decrement 之后使用了反向引用,要求变量与 for 之后的变量相同。

关于python - 了解正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750877/

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