Python提取可能包含特定标点符号的空格分隔词

2024-09-27 00:17:13 发布

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

我有一些与文本有关的任务,我需要正确地将字符串拆分成单词。 我的任务是使用Python3。在

这种方式不适合我:

re.sub("[^\w]", " ", hotelName.lower()).split()

因为像这样的句子中的单词:

^{pr2}$

被吐在名单上:

 ['st', 'augst', 'bridge', 'south', 'west', 'torreluca', 'b', 'b', 'o',
 'dell', 'cabin', 'wastlgasse', 'mm', '505']

但我需要以这种方式拆分术语(以保存整个术语):

 ["st.augst", "bridge", "South-West", "Torreluca", "B&B", "O'Dell", 
"Cabin", "Wastlgasse", "MM-505"]

这意味着我需要拆分文本:

  • 空格
  • “,”,“!”, "?"
  • “.”“如果点在单词末尾空格之前或字符串末尾(以防止圣奥古斯特=>;“st”,“八月”)
  • 删除“[”、“{”、“(”等。。。在

如果熟悉regexp的人能帮我完成这项任务,我将非常感激。从文档中获取术语似乎是相当常见的任务。在


Tags: 字符串文本re方式单词lowerpython3bridge
3条回答

更新了一个wser来使用python3

也许有更好的方法,但以下哪种方法有效:

import re
string = "(St.Augst bridge), South-West Torreluca! B&B O'Dell Cabin Wastlgasse MM-505?"
wordlist = re.split(r'[()!?,]|\.?\s+', string)
wordlist = list(filter(lambda a: a != '', wordlist))
print(wordlist)

输出:

^{pr2}$

Regex模式[()!?,]|\.?\s+可以像“all characters'(',')','!', '?' 或者','或者前面可以加一个点的空白

因为有时我们要拆分与''完全匹配的字符串部分,例如,re.split将返回包含空字符串的列表,这就是为什么我在第4行过滤输出列表。

搜索单词边界之间的非空白模式\b

import re

hotel_name = "(St.Augst bridge), South-West Torreluca! B&B O'Dell Cabin Wastlgasse MM-505?"

REGEX = r"\b\S+\b"
finder = re.compile(REGEX)

matches = re.findall(finder, hotel_name)
print(matches) 

输出:

^{pr2}$

首先,把你不想要的东西翻译出来,然后再分开。

In [26]: test = "(St.Augst bridge), South-West Torreluca! B&B O'Dell Cabin Wastlgasse MM-505?"

In [27]: test.translate({ord(j): None for j in ',?!()'}).split()
Out[27]: 
['St.Augst',
 'bridge',
 'South-West',
 'Torreluca',
 'B&B',
 "O'Dell",
 'Cabin',
 'Wastlgasse',
 'MM-505']

相关问题 更多 >

    热门问题