我可以在包含元字符的地方创建RegEx集吗?

时间:2019-10-17 15:56:30

标签: python regex

我的语料库由数千个字符串组成。我想对每个字符串运行一个正则表达式,以查找特定单词的开头和结尾,包括所有标点符号。

我试图编写一个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一起使用。

3 个答案:

答案 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+个空格字符,这些字符也将匹配换行符

Regex demo | Python demo

例如

\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测试)。