Python 正则表达式是否匹配StructureText语法?

Python 正则表达式是否匹配StructureText语法?,python,regex,Python,Regex,我有一个正则表达式,它应该匹配restrutureTextContent,但它运行起来很奇怪 import re # match regular expression such as # ===, ---, ^^^ for heading, # ... anyword:, :anyword: for directive Regx = re.compile(r'^(====)?|^(-----)?|..\s+\w+::|(^)|(\.\.\s+\w+)?::$|^(\^\^\^\^)|:\w+:

我有一个正则表达式,它应该匹配
restrutureText
Content,但它运行起来很奇怪

import re

# match regular expression such as
# ===, ---, ^^^ for heading,
# ... anyword:, :anyword: for directive
Regx = re.compile(r'^(====)?|^(-----)?|..\s+\w+::|(^)|(\.\.\s+\w+)?::$|^(\^\^\^\^)|:\w+:')

Text = """
# blogger

`blogger` is a command line utility originally created for converting articles, text, or HTML into speech. This is especially helpful for bloggers who like to provide audio options for their users.

This is a wrapper around a couple of different text to speech tools and is designed to be a simple interface for any user of the `blogger` CLI.

`blogger` is an open-source project from Buster Technologies, the creators of [Buster ERP](https://bustererp.com). Our company published technical and business content on the [Simpler Software Blog](https://bustererp.com/blog) and needed a simple tool to convert articles to audio files.
"""
TrueOrFalse = re.match(Regx, Text)

if TrueOrFalse:
    print 'It is a restructureText.'
else:
    print 'It is a plain text or markdown.'
经过测试,我不知道为什么我的正则表达式与文本开头匹配。谢谢

补充: 上面的代码段,因为输入的文本是变量
text
,是
markdown
语法,它不应该与任何语法匹配,但是在
if语句中,它返回
True
并打印“它是一个文本”。结果是不正确的

my regex应该匹配的文本是这样的文本语法

=======
Abathur
=======

.. image:: https://travis-ci.org/yeyuexia/dummie.svg?branch=master
   :target: https://travis-ci.org/yeyuexia/dummie

Simple Template manager to manage template and create project based on template.

Requirements
------------

* Python 3.6+
* Works on Linux, Windows, Mac OSX, BSD

Install
-------

pip::

  pip install abathur
我的正则表达式与这个输入的文本匹配,但它也与第一个代码段中的一个匹配,它不应该匹配


我的定期快车怎么了?我怎样才能解决这个问题?感谢您为正则表达式输入多行文本。必须对正则表达式使用标志
re.MULTILINE

您会注意到,当在
regex101.com
中进行测试时,它们的默认标志是
\gm
。分别代表
全局
多行

您很可能试图使用
$
匹配行尾。但是您的代码匹配字符串的结尾,即整个字符串。还有值得一提的<如果
^
应匹配行的开头,而不是字符串的开头,则不应使用code>match

值得注意的是,考虑使用<代码>搜索<代码>,而不是<代码>匹配<代码>,在这种情况下,你需要<代码> ^ <代码>来匹配行的开始,而不是字符串的开始。即使是
re.MULTILINE
也不能使它适用于
match
。阅读

所以改变这个

TrueOrFalse=re.match(Regx,文本)
对此

TrueOrFalse=re.search(Regx,Text,re.MULTILINE)
还有,你的正则表达式完全错了。在你的问题中,你没有提到你想要匹配什么。但是您的正则表达式有一个替代方法来匹配
(^)
,它始终是匹配的。所以,不管发生什么,它都会返回匹配。检查您的regex101备选方案,它们会告诉您您的regex将匹配哪些模式。其中一种模式就是
(^)


如果您希望我们为您构建正则表达式,请提供一个示例,展示您希望匹配的“restructureText”。

为正则表达式输入多行文本时。必须对正则表达式使用标志
re.MULTILINE

您会注意到,当在
regex101.com
中进行测试时,它们的默认标志是
\gm
。分别代表
全局
多行

您很可能试图使用
$
匹配行尾。但是您的代码匹配字符串的结尾,即整个字符串。还有值得一提的<如果
^
应匹配行的开头,而不是字符串的开头,则不应使用code>match

值得注意的是,考虑使用<代码>搜索<代码>,而不是<代码>匹配<代码>,在这种情况下,你需要<代码> ^ <代码>来匹配行的开始,而不是字符串的开始。即使是
re.MULTILINE
也不能使它适用于
match
。阅读

所以改变这个

TrueOrFalse=re.match(Regx,文本)
对此

TrueOrFalse=re.search(Regx,Text,re.MULTILINE)
还有,你的正则表达式完全错了。在你的问题中,你没有提到你想要匹配什么。但是您的正则表达式有一个替代方法来匹配
(^)
,它始终是匹配的。所以,不管发生什么,它都会返回匹配。检查您的regex101备选方案,它们会告诉您您的regex将匹配哪些模式。其中一种模式就是
(^)


如果您希望我们为您构造正则表达式,请提供一个示例,展示您希望匹配的“restructureText”。

适用于我,因为我在
print
语句的字符串周围使用了括号。你应该分享你的错误。@pinkspikyhairman,结果应该是“它是纯文本或减价。”但控制台上的结果是“它是一个重新构造的文本”。相反,@pinkspikyhairman,我已经相应地更新了我的问题,感谢你的正则表达式,你有一个匹配和捕获的替代选项
(^)
(为什么?)这句话的开头总是正确的。你为什么要这样做?@Toto,的确,
(^)
我想将文字字符
^
匹配一次或多次。只要我在
print
语句的字符串周围使用括号,这对我来说就行了。你应该分享你的错误。@pinkspikyhairman,结果应该是“它是纯文本或减价。”但控制台上的结果是“它是一个重新构造的文本”。相反,@pinkspikyhairman,我已经相应地更新了我的问题,感谢你的正则表达式,你有一个匹配和捕获的替代选项
(^)
(为什么?)这句话的开头总是正确的。你为什么要这样做?@Toto,的确,
(^)
我想将文字字符
^
匹配一次或多次。谢谢,但我将我的regx改为
TrueOrFalse=re.search(regx,Text,re.MULTILINE)
但结果没有改变,表达式仍然返回True而不是False。另一方面,在regex101上,在句子的开头有很多粉红色的点。谢谢。请阅读完整的答案,我已经解释了正则表达式匹配一切的原因。我不擅长正则表达式,我很抱歉。错误出现在我试图匹配的
(^)
位置,该位置出现了一个或多个
^
,应该是
(\^)
。无论如何,非常感谢您在正则表达式方面对我的帮助。:)谢谢,但是我将我的regx改为
TrueOrFalse=re.search(regx,Text,re.MULTILINE)
但是结果没有改变,表达式仍然返回True而不是False。另一方面