我可以在中创建一个包含元字符的正则表达式集吗?

2024-09-30 01:23:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的语料库是由成千上万的字符串组成的。我想在每个字符串上运行一个正则表达式来查找特定单词的开头和结尾,包括任何标点符号

我试过写一个正则表达式,其中包含一组可能的单词开头/结尾,包括空格、逗号、句号等常规字符。它还需要包含新行和字符串结尾等元字符

下面是一个字符串示例和我一直尝试使用的正则表达式:

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(" ")

它需要像我上面描述的那样使用正则表达式


Tags: 字符串textremy结尾字符单词空格
3条回答

这个正则表达式行吗[ \^]*a\wcd[ .,$]*(用非常有用的https://regex101.com测试)

您可以使用以下regex,为结束条件添加or(|)大小写:

'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

你可以用

\ba\wcd[.,]?\s*

部分

  • \ba匹配wordboundary后跟a
  • \w匹配单词字符
  • cd按字面意思匹配cd
  • [.,]?匹配可选的.,
  • \s*匹配0+个空白字符,这些字符也将匹配换行符

Regex demo| Python demo

例如

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())

输出

abcd 
aacd. 
abcd

adcd

相关问题 更多 >

    热门问题