Python正则表达式搜索特定字符串旁边的numb

2024-05-15 11:00:22 发布

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

我需要帮助。 我有一个列表和字符串。你知道吗

我想做的事情是找到字符串中的所有数字,并匹配字符串中数字旁边列表中的单词。你知道吗

str = 'Lily goes to school everyday at 9:00. Her House is near to her school. 
Lily's address - Flat No. 203, 14th street lol lane, opp to yuta mall, 
washington. Her school name is kids International.'

list = ['school', 'international', 'house', 'flat no']

我写了一个正则表达式,可以提取数字

x = re.findall('([0-9]+[\S]+[0-9]+|[0-9]+)' , str,re.I|re.M)

我想要的输出:

Numbers - ['9:00', '203', '14th'] 

Flat No.203(因为flat no203旁边)
14也在字符串旁边,但我不想要它,因为它不包含在列表中。你知道吗

但是如何编写正则表达式来满足第二个条件呢。那就是搜索 在同一正则表达式中,flat no是否在203旁边。你知道吗


Tags: tono字符串re列表is数字单词
1条回答
网友
1楼 · 发布于 2024-05-15 11:00:22

给你:

(\d{1,2}:\d{1,2})|(?:No\. (\d+))|(\d+\w{2})

Regex101.com上的演示可以找到here


它做什么?它是如何工作的?

我使用两个管道(|)收集您想要的不同数量的“类型”:

  • 第一个改变((\d{1,2}:\d{1,2})-使用1-2个数字,后跟冒号和另一组1-2个数字来捕获时间(可能您只能使用2个数字)。

  • 第二个改变(?:No\. (\d+))-给你一个以文字“No.”(注意结尾的空格)为前缀的数字,然后捕获下面的数字,不管它有多长(至少一个数字)

  • 第三部分和最后一部分(\d+\w{2})-简单地捕获任意数量的数字(同样,至少一个),后跟两个单词字符。您可以进一步改进正则表达式的这一部分,使其只匹配stndth后缀,但我将把这个留给您来决定。

另外,为了消除更多不必要的匹配,您可以使用lookarounds,但是再次-我将把这个留给您来实现。你知道吗

一般注意事项-与其使用一个正则表达式来规则。。。如果把它们都匹配起来,您应该集中精力创建许多简单的正则表达式。这不仅可以提高正则表达式的易读性,还可以提高正则表达式的可维护性。这还允许您分别搜索时间戳、建筑编号和位置编号,方便您将这些信息拆分为特定变量。你知道吗

相关问题 更多 >