Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有可能把起始正则表达式锚定在正则表达式的中间吗?_Python_Regex_Search - Fatal编程技术网

Python 有可能把起始正则表达式锚定在正则表达式的中间吗?

Python 有可能把起始正则表达式锚定在正则表达式的中间吗?,python,regex,search,Python,Regex,Search,我有一些句子需要转换成正则表达式代码。这些句子基本上是搜索规则,告诉我们要搜索什么 句子示例- 行\u包含这是一个短语 -这是一个示例搜索规则,告诉您正在搜索的行应该有短语这是一个短语 LINE\u STARTSWITH while we-这是一个示例搜索规则,告诉您正在搜索的行应以短语while we开头 这些规则也可以组合在一起,比如-LINE_在{phrase2和phrase3}之前包含短语1,LINE_开始使用,但是我们 现在,我试图解析这些句子,然后将它们转换为正则表达式代码。所有行都

我有一些句子需要转换成正则表达式代码。这些句子基本上是搜索规则,告诉我们要搜索什么

句子示例-

  • 行\u包含这是一个短语
    -这是一个示例搜索规则,告诉您正在搜索的行应该有短语
    这是一个短语

  • LINE\u STARTSWITH while we
    -这是一个示例搜索规则,告诉您正在搜索的行应以短语
    while we
    开头

  • 这些规则也可以组合在一起,比如-
    LINE_在{phrase2和phrase3}之前包含短语1,LINE_开始使用,但是我们

  • 现在,我试图解析这些句子,然后将它们转换为正则表达式代码。所有行都以上述两个符号中的任意一个开始,即行_包含的符号和行_开始的符号(称为行_指令)。为此,我将这些短语转换为相应的正则表达式,并希望对line_指令也这样做。对于第_行包含的内容,我不必做任何事情,因为下面的内容都应该被搜索,这就是短语部分的正则表达式所做的。然而,对于行_STARTSWITH,我想在正则表达式的开头放上它后面的任何内容。例如,
    LINE_STARTSWITH while we
    显然会变成
    (^while we)

    因此,
    LINE_的正则表达式包含{phrase2和phrase3}之前的短语1,而LINE_开始使用while we
    将是
    re.search(^while we(?=phrase one.*(phrase2 | phrase3))

    我的问题是,除了正则表达式的开头,是否可以在正则表达式的其他地方使用这个start锚元素。例如
    (某物)(^start元素)(其他某物)
    ,但我想这是不允许的。如果这是不允许的,那为什么呢


    我需要这个,因为在解析时,并不总是能够将这个start元素放在开头。因此,我分别解析不同的元素,并计划在最终的正则表达式中将它们作为单独的单元放在一起。另外,我描述了整个项目,以避免出现错误。

    您可以在模式中的某个地方使用
    ^
    ,如果您匹配行的开头,这将是有意义的。如果在图案中使用
    ^
    而不使用多行修改器,则匹配将始终失败。您可以对必须放入1个正则表达式中的条件进行排序,首先处理那些有
    行开始的条件,然后处理其他条件(所有
    行结束的条件将分别是最后一组条件)。您的意思是
    ^(?=.*包含这个东西)(?=从这个东西开始)
    ?@WiktorStribiżew也将
    (abc)(xyz)(pqrs)
    (xyz)(^abc)(pqrs)
    ?@user1993:正如我所写的,
    ^
    在这种模式下永远不会失败,因为它需要字符串位置的开始。@Ryan,所以我猜你对正则表达式的所有其余部分都使用了lookahead(排序和运算符)?所以,即使它很长很复杂,也可以这样做,对吗?