我正在尝试对具有富文本格式的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而不是纯文本时,才会发生这种情况
答案 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是您的朋友。
第二,您可能要使用QRegularExpression
。 QRegEx
实际上正在朝着弃用方向发展,其功能(或合规性)不及QRegularExpression
那样。
也就是说,让我们看一下您尝试捕获的“ html”可以写为纯字符串的可能方式。
Lorem ipsum dolor sit amet.<br>Consectetur adipiscing elit.<br>sed do eiusmod tempor incididun
要尝试的第一件事是Lorem.+<br>
(注意:否\n
),但是匹配得太多。
默认情况下,正则表达式是贪婪的。这意味着他们将尝试尽可能地匹配,从而为您提供前两行。因此,我们需要告诉+
不要贪婪。如果您使用的是QRegularExpression
,则可以使用非贪婪的限定词来提出Lorem.+?<br>
。