我的语料库由数千个字符串组成。我想对每个字符串运行一个正则表达式,以查找特定单词的开头和结尾,包括所有标点符号。
我试图编写一个RegEx,其中包括一组包含许多可能的单词开头/结尾的集合,包括常规字符(例如空格,逗号,句号等)。它还需要包含元字符,例如换行符和字符串-结束。
这是一个字符串以及我一直尝试使用的正则表达式的示例:
text = "abcd aacd. abcd\n adcd"
my_re = re.compile(r'[ ^]a\wcd[ .,$]')
pat_iter = my_re.finditer(text)
for i in pat_iter:
print(i.group())
我想从中得到的输出是:
abcd
aacd.
abcd
adcd
不幸的是,我无法在方括号^
中使用\n
,$
和[]
之类的元字符。
有什么方法可以使字符集中转义,以便将它们用作元字符?
编辑: 我不想使用诸如在任何有空格的地方拆分这些单词来分隔这些单词,例如:
text = text.split(" ")
它必须与如上所述的RegEx一起使用。
答案 0 :(得分:1)
您可以使用以下正则表达式为结束条件添加一个或(|
)大小写:
'a\wcd[ \.\n]|a\wcd$'
示例:
import re
text = "abcd aacd. abcd\n adcd"
my_re = re.compile(r'a\wcd[ \.\n]|a\wcd$')
pat_iter = my_re.finditer(text)
for i in pat_iter:
print(i.group())
# abcd
# aacd.
# abcd
# adcd
答案 1 :(得分:1)
您可以使用
[
{a:'titi', x: false, y: 3},
{a:'toto', x: false, y: 6}
]
.reduce((a, b, i) => ({
x : a.x === b.x || i == 0 ? b.x : undefined,
y : a.y + b.y
}))
部分
\ba\wcd[.,]?\s*
匹配单词边界,后跟\ba
a
匹配单词字符\w
从字面上匹配cd
cd
匹配可选的[.,]?
或.
,
匹配0+个空格字符,这些字符也将匹配换行符例如
\s*
输出
import re
text = "abcd aacd. abcd\n adcd"
my_re = re.compile(r'\ba\wcd[.,]?\s*')
pat_iter = my_re.finditer(text)
for i in pat_iter:
print(i.group())
答案 2 :(得分:0)
此正则表达式可以工作吗? [ \^]*a\wcd[ .,$]*
(经过非常有用的https://regex101.com测试)。