首页 > 编程知识 正文

python正则表达式提取字段,正则文法和正则表达式的相互转化

时间:2023-05-05 14:16:54 阅读:143174 作者:3148

使用

bash regular expressions :

re='http://([^/] )/) )。

if[$name=~~$re]; then echo ${BASH_REMATCH[1]}; fi

编辑op提示语法说明。 Regular expression syntax是一个很大的话题,虽然在这里无法全面介绍,但是为了充分理解这个例子,我会尝试一下。

re='http://([^/] )/) )。

这是存储在bash变量中的正则表达式。 这意味着您希望输入字符串匹配并提取子字符串。 打破它:

http://只是一个字符串。 输入字符串必须包含正则表达式匹配的子字符串

[]通常使用方括号表示“匹配括号中的任何字符”。 因此,c [ao] t与“猫”和“婴儿床”一致。 []的^字符已更改为“匹配方括号中的任何字符”,因此在这种情况下,[^ /]将匹配除“/”之外的任何字符。

方括号表达式只能匹配一个字符。 在最后添加时,说“匹配一个或多个上一个子表达式”。 因此,[^ /]匹配一个或多个所有字符的集合,并且不包含“/”。

在子表达式周围)放置括号意味着保存与该子表达式匹配的后续处理。 如果您的语言支持此功能,将提供获取这些子匹配的机制。 对于bash,这是BASH_REMATCH数组。

最后,完全匹配“/”,以使所有完全限定的域名方法与以下“/”匹配

接下来,您需要根据正则表达式测试输入字符串以确定它们是否匹配。 要执行此操作,请使用bash条件。

if[$name=~~$re]; then

echo ${BASH_REMATCH[1]}

fi

在bash中,[ ]指定扩展条件测试,并且可以包括=bash正则表达式运算符。 在这种情况下,测试输入字符串$ name是否与正则表达式$ re匹配。 如果匹配,则由于正则表达式的结构,括号() ) ) ) )保证存在子匹配)。 可以使用BASH_REMATCH数组进行访问。

数组中的元素0 $ {BASH_REMATCH [0]}是正则表达式匹配的整个字符串,即“http://www.google.com/”。

数组的后续元素是子匹配的后续结果。 请注意,正则表达式按顺序对应多个子匹配(-bash _ rematch元素)。 所以在这种情况下,$ {BASH_REMATCH [1]}包含“www.google.com”。 我觉得这是你想要的字符串。

请注意,BASH_REMATCH数组的内容仅在上次使用正则表达式=operator时应用。 所以如果继续进行更多的正则表达式匹配,每次都必须从这个数组中保存需要的东西。

这可能看起来像是一个很长的解释,但它真正掩盖了正则表达式的复杂性。 他们非常强大,相信体面的表达,但正则表达式的语法很复杂。 正则表达式的实现也不同,因此不同的语言支持不同的功能,在语法上可能会有微妙的差异。 特别是正则表达式中的字符转义可能是一个难题。 特别是当这些字符在特定语言中具有不同的含义时。

请注意,您可以通过在条件中引用此变量,将正则表达式直接放置在条件中,而不是将$ re变量设置为另一行。 但是,在bash 3.2中,对于是否需要这样的字符正则表达式引号,这些规则进行了更改。 将正则表达式放入另一个变量是一种简单的方法,可以在所有支持=match运算符的bash版本中按预期执行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。