当我尝试在文本上使用 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}-)'
在得到帮助后,我终于设法在文本上应用正则表达式来尝试找到一些模式。
我的项目包括在用葡萄牙语编写的文本中查找对话。在葡萄牙语中,对话可以通过某些方式找到:破折号之间(-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}-)'