2017-07-27 80 views
-1

我需要帮助。 我有一个列表和字符串。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 no是旁边203
14也是字符串,但我身边不要它,因为它不包含在列表中。

但我该如何写正则表达式来使第二个条件满足。即搜索 flat no是否在203之外,或者不在相同的正则表达式中。

+1

在python正则表达式中搜索postive lookahead断言。将解决你的问题 –

+0

不要调用你的列表'list'这是一个类型名称。 – Shai

+1

因为有一个分离的点,所以'没有'不在203旁边。问题的规格不清楚。另外'9:00'不是一个数字。 – Gribouillis

回答

1

你去那里:在Regex101.com

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

演示可以发现here


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

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

  • 第一变更((\d{1,2}:\d{1,2}) - 捕捉使用1-2位数字加一个冒号和另一组的1次-2数字(可能你只能使用2位数字)

  • 第二次更改(?:No\. (\d+)) - 给出的数字前面加上“No.”字样(注意最后的空格),然后捕获下面的数字,no事情多久(至少一位数字)

  • 第三个也是最后一个部分(\d+\w{2}) - 只需捕获任意数量的数字(至少一个),后面跟两个单词字符。您可以进一步改进正则表达式的这部分,以仅匹配st,ndth后缀,但我将离开此直至您

也摆脱进一步不必要的比赛,你可以使用lookarounds,但再次 - 我会离开这个给你实现。

一般注意事项 - 而不是使用一个正则表达式来规则...... erm--匹配它们,你应该专注于创建许多简单的正则表达式。这不仅可以提高可读性,还可以提高正则表达式的可维护性。这还允许您分别搜索时间戳,建筑物编号和位置编号,分别为,轻松地允许您将此信息拆分为特定变量。

相关问题