QT Regex-如何将<br/>解释为新行?

时间:2018-06-19 14:45:40

标签: regex qt pyqt

我正在尝试对具有富文本格式的QTextEdit小部件执行一些正则表达式搜索。视觉上它可以正常显示,但是正则表达式忽略了许多<BR>换行符,并将整个文本视为一个大的单行。

如果我将文本显示为纯文本,而在新行中使用\n,则正则表达式搜索可以完美地将每行解释为自己的行。但是,顾名思义,纯文本没有我需要的富文本格式。

反正则表达式是否可以将HTML换行符解释为新行而不是\n,还是可以使正则表达式与HTML一起正常工作的任何方式?我尝试添加<BR>\n,但这无济于事。

我正在将QTextEdit.find(QRegExp)与PyQT5用于Python。


这是正在发生的事的一个例子:

正则表达式模式Lorem.+

文本正文

  

Lorem ipsum dolor坐在amet。

     

保密专家。

     

sed做eiusmod tempor incididun

预期匹配

Full match  0-28    `Lorem ipsum dolor sit amet. `

实际匹配

Full match  0-89    `Lorem ipsum dolor sit amet.Consectetur adipiscing elit.sed do eiusmod tempor incididunt`

我不认为这是点匹配所有字符(包括换行符)的问题,因为在纯文本模式下使用完全相同的正则表达式模式(使用\n作为换行)时,点不包括换行符太。仅当我将文本QTextEdit设置为HTML而不是纯文本时,才会发生这种情况

3 个答案:

答案 0 :(得分:1)

不是使用<br>来表示富文本HTML的新行,而是将每行放在<div>标记之间,并且使用regex时,它会将div的结尾视为行的结尾。

  

确实很奇怪,但是可以解决

出于某种奇怪的原因,在QT中,使用正则表达式时,在QTextEdit中使用富文本HTML时,<br>行换行标记未解释为\n

确实很奇怪,但是可以工作,当转换回纯文本时,文本内容不会改变,其视觉效果与使用<br>完全相同。

不确定这是QT错误还是有原因。

答案 1 :(得分:0)

据我所知,如果要使用REGEX解析HTML,则会走错路了:

RegEx match open tags except XHTML self-contained tags

  

您是否尝试过使用XML解析器?

尝试一下:Lorem.+?(<\\Br>|\n)

答案 2 :(得分:0)

首先,在尝试找出正则表达式时,regex101.com是您的朋友。

第二,您可能要使用QRegularExpressionQRegEx实际上正在朝着弃用方向发展,其功能(或合规性)不及QRegularExpression那样。

也就是说,让我们看一下您尝试捕获的“ html”可以写为纯字符串的可能方式。

Lorem ipsum dolor sit amet.<br>Consectetur adipiscing elit.<br>sed do eiusmod tempor incididun

要尝试的第一件事是Lorem.+<br>(注意:否\n),但是匹配得太多。

默认情况下,正则表达式是贪婪的。这意味着他们将尝试尽可能地匹配,从而为您提供前两行。因此,我们需要告诉+不要贪婪。如果您使用的是QRegularExpression,则可以使用非贪婪的限定词来提出Lorem.+?<br>