在单词后面的某些字符上查找并拆分

2024-03-29 10:05:13 发布

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

我正在尝试使用正则表达式来拆分标点符号上的文本,只有当标点符号跟在单词后面,并继续执行空格或字符串结尾时。你知道吗

我试过([a-zA-Z])([,;.-])(\s|$)

但是当我想在Python中拆分时,它包含单词的最后一个字符。你知道吗

我想这样分开:

text = 'Mr.Smith is a professor at Harvard, and is a great guy.'
splits = ['Mr.Smith', 'is', 'a', 'professor', 'at', 'Harvard', ',', 'and', 'a', 'great', 'guy', '.']

任何帮助都将不胜感激!你知道吗


Tags: and字符串文本is单词atsmithmr
3条回答

似乎你想做标记化。试试nltk

http://text-processing.com/demo/tokenize/

from nltk.tokenize import TreebankWordTokenizer
splits = TreebankWordTokenizer().tokenize(text)

您可以先在([.,](?=\s)|\s)上拆分,然后过滤掉空字符串或空白字符串:

In [16]: filter(lambda s: not re.match(r'\s*$', s) , re.split(r'([.,](?=\s)|\s)',  'Mr.Smith is a professor at Har
    ...: vard, and is a great guy.'))
Out[16]: 
['Mr.Smith',
 'is',
 'a',
 'professor',
 'at',
 'Harvard',
 ',',
 'and',
 'is',
 'a',
 'great',
 'guy.']

你可以用

re.findall(r'\w+(?:\.\w+)*|[^\w\s]', s)

参见regex demo。你知道吗

细节

  • \w+(?:\.\w+)*-1+字字符,后跟0个或多个点,后跟1+字字符
  • |-或
  • [^\w\s]-除单词和空格字符以外的任何字符。你知道吗

Python demo

import re
rx = r"\w+(?:\.\w+)*|[^\w\s]"
s = "Mr.Smith is a professor at Harvard, and is a great guy."
print(re.findall(rx, s))

输出:['Mr.Smith', 'is', 'a', 'professor', 'at', 'Harvard', ',', 'and', 'is', 'a', 'great', 'guy', '.']。你知道吗

这种方法可以进一步精确。例如,仅将字母、数字和下划线标记为标点符号:

re.findall(r'[+-]?\d*\.?\d+|[^\W\d_]+(?:\.[^\W\d_]+)*|[^\w\s]|_', s)

参见regex demo

相关问题 更多 >