当我尝试在文本上使用 Regex 时,为什么会出现破折号?

Whey am I getting a dash when I try to use Regex on a text?

在得到帮助后,我终于设法在文本上应用正则表达式来尝试找到一些模式。

我的项目包括在用葡萄牙语编写的文本中查找对话。在葡萄牙语中,对话可以通过某些方式找到:破折号之间(-ele disse que sim-),以破折号开始对话(-ele disse que sim),以及引号之间(“eu acho que sim”)。

但是,由于葡萄牙语中的单词也可以包含破折号,例如“viu-me”或“disse-lhe”,我制作了一个考虑了所有这些信息的代码。

我遇到的问题是在文本中搜索模式时出现破折号。

这是我的代码:

    text = '''
"Para muitos é mais do que isso."

Eles chegarem em casa são e salvos

Viu-se que eles não estavam lá
'''


 for d in re.finditer(r'(".+")|(^\s?-\s.+\s|-)', text, re.MULTILINE):
    print(d.group())

这是当前输出:

"Para muitos é mais do que isso."
-

太棒了,代码设法找到引号中的对话,但也打印了一个破折号。好像发现它不是对话,只是一个嵌入破折号的单词,但仍然显示破折号。

期望的输出:

"Para muitos é mais do que isso."

只需在正则表达式的最后放一个 $ 符号,表示结束。

r'(".+")|(^\s?-\s.+\s|-$)'

这是因为在(^\s?-\s.+\s|-)中以|-结尾的不正确。它基本上告诉正则表达式匹配 \s?-\s.+\s 或 dash/hyphen。最终匹配 Viu-se 中的连字符,因为 |-.

中没有空格的概念

您可能还需要删除第二组中的 ^,因为如果句子中间有破折号,您将无法识别。

示例:

import re

text = '''
"Para muitos é mais do que isso."

Eles chegarem em casa são e salvos

Viu-se que eles não estavam lá

hello - More text and example - and stuff

a confusing-example-with-hyphens

Here is something else

- Start with dashes -, "quote me here"
'''

rgx = r'(".+")|(\s?-\s.+\s-)'

for d in re.finditer(rgx, text, re.MULTILINE):
    print(d.group())

得到你:

"Para muitos é mais do que isso."
 - More text and example -

- Start with dashes -
"quote me here"

N.B:您还可以控制要查看的确切空格数,以防您不想匹配破折号后的多个空格; rgx = r'(".+")|(\s?-\s{1}.+\s{1}-)'