我需要帮助。 我有一个列表和字符串。你知道吗
我想做的事情是找到字符串中的所有数字,并匹配字符串中数字旁边列表中的单词。你知道吗
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
旁边。你知道吗
给你:
(\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})
-简单地捕获任意数量的数字(同样,至少一个),后跟两个单词字符。您可以进一步改进正则表达式的这一部分,使其只匹配st
、nd
和th
后缀,但我将把这个留给您来决定。另外,为了消除更多不必要的匹配,您可以使用lookarounds,但是再次-我将把这个留给您来实现。你知道吗
一般注意事项-与其使用一个正则表达式来规则。。。如果把它们都匹配起来,您应该集中精力创建许多简单的正则表达式。这不仅可以提高正则表达式的易读性,还可以提高正则表达式的可维护性。这还允许您分别搜索时间戳、建筑编号和位置编号,方便您将这些信息拆分为特定变量。你知道吗
相关问题 更多 >
编程相关推荐