正则表达式:选择 | 之前的所有内容但不选择 | (介于 之间)

正则表达式:选择 | 之前的所有内容但不选择 | (介于 之间)

我有这个例子:

<title>Square Meters | Dragon White (en)</title>

我想使用正则表达式来选择所有内容,|但不|包括(...之间)

我的两个正则表达式也选择了|,这就是为什么我需要一个更好的公式,没有那个|

搜索:\w+.*\|\w+.*?[\s\S]\|

这是我的 Python 代码中的一行,我必须对正则表达式进行一些更改:

words = re.findall(r'\w+', new_filename)

现在的结果是square-meters-dragon-white-en.html

但预期的结果应该是:square-meters.html

这是包含 Python 代码的部分:

new_filename = title.get_text() 
new_filename = new_filename.lower()
words = re.findall(r'\w+', new_filename)
new_filename = '-'.join(words)
new_filename = new_filename + '.html'
print(new_filename)

如果我以这种方式改变正则表达式,我会非常接近:(?=\w+).*(?= \|)

words = re.findall(r'(?=\w+).*(?= \|)', new_filename)

我得到了:(square meters.html但没有小破折号)

答案1

简单使用:[^|]+# 1 或多个任何非管道字符,这也会选择换行符。

如果不想选择换行,请使用:[^|\r\n]+

这将在任何支持正则表达式的文本编辑器中工作。

答案2

谢谢@Toto

  • Ctrl+F
  • 找什么:\b\w+\b(?=[\w\s]+\|)
  • 查看 环绕
  • 查看 正则表达式
  • Find All in Current Document

对于您的 Python 代码,请使用以下行进行更改:

words = re.findall(r'\b\w+\b(?=[\w\s]+\|)', new_filename)

相关内容