Regex 使用正则表达式从DF中提取精确匹配
我正在研究DF(文本),其中我需要从只包含月/年的文本中准确提取月/年,但当我应用此公式时,它也从dd/月/年中提取月/年,这也是我不想要的 e、 g Text1-5/24/1990 CPT代码:90792:医疗服务 Text2-自2014年10月起:疲劳,健忘,左手灵活性受损。MRI显示一个约4.2cm x 3.3cm x 2.5cm的右顶叶强化肿块,周围水肿 我只需要从DF中提取Regex 使用正则表达式从DF中提取精确匹配,regex,python-3.x,pandas,dataframe,Regex,Python 3.x,Pandas,Dataframe,我正在研究DF(文本),其中我需要从只包含月/年的文本中准确提取月/年,但当我应用此公式时,它也从dd/月/年中提取月/年,这也是我不想要的 e、 g Text1-5/24/1990 CPT代码:90792:医疗服务 Text2-自2014年10月起:疲劳,健忘,左手灵活性受损。MRI显示一个约4.2cm x 3.3cm x 2.5cm的右顶叶强化肿块,周围水肿 我只需要从DF中提取2014年10月,但当我应用此公式时,它会同时提取1990年24月和2014年10月 当文本中只提到年份时,我还需
2014年10月
,但当我应用此公式时,它会同时提取1990年24月
和2014年10月
当文本中只提到年份时,我还需要从同一DF的文本中只提取年份
公式:
df['Text'].str.extractall(r'((?P<Month>\d{1,2})\/(?P<Year>\d{4}))')
df['Text'].str.extractall(r'((P\d{1,2})\/(P\d{4})))
那么:
((?<!\d/)(?<!\d)(?P<Month>\d{1,2})\/(?P<Year>\d{4}))
((?\d{1,2})\/(?\d{4}))
如所见
注意:这是最全面的解决方案,但有比这更简单的方法,比如在可提取日期之前检查空间
说明:
(?在正则表达式中是一个负的lookbehind,它确保匹配之前没有任何内容。在这里,我确保匹配之前没有数字或数字后面有斜杠,如何:
((?<!\d/)(?<!\d)(?P<Month>\d{1,2})\/(?P<Year>\d{4}))
((?\d{1,2})\/(?\d{4}))
如所见
注意:这是最全面的解决方案,但有比这更简单的方法,比如在可提取日期之前检查空间
说明:
(?是正则表达式中的一个负数lookbehind,它确保匹配之前没有任何内容。在这里,我确保匹配之前没有数字或数字后跟斜杠
说明:
(?-反向查找:断言前面的不是/
或\d
(任何数字)
\d{1,2}
-匹配一个或两个数字
\/
-按字面意思匹配/
\d\d\d\d
-匹配四位数字
(?!\/\d)
-负前瞻:断言下面的内容不是/
或\d
(任何数字)
试试:(
说明:
(?-反向查找:断言前面的不是/
或\d
(任何数字)
\d{1,2}
-匹配一个或两个数字
\/
-按字面意思匹配/
\d\d\d\d
-匹配四位数字
(?!\/\d)
-负前瞻:断言下面的内容不是/
或\d
(任何数字)
该模式匹配月份的2位数字,而不是\d{1,2}
我认为您也可以使用字符类(?\d{1,2})/(?\d{4})(?![/\d])编写它
@Thefourthbird谢谢,更正。您对类的理解是正确的,这是我最初的想法,但环顾四周会提供更大的灵活性。此解决方案有三个问题:1)它无法与当前操作代码一起工作2)如果在/
之前存在预期的匹配,则无法工作,3)如果有一年没有月份,它不会只提取一年。谢谢,我的问题已经解决。非常感谢您的帮助。@AnandJyesth您应该接受其中一个答案或发布自己的答案,以便将来有人可以从这个问题中受益。模式匹配月份的2位数字,而不是\d{1,2}
我想你也可以使用字符类(?\d{1,2})/(?P\d{4})(?![/\d])来编写它。
@Thefourthbird谢谢,更正了。你对类的理解是正确的,这是我最初的想法,但是lookarounds提供了更多的灵活性。这个解决方案有三个问题:1)它不能与当前的操作代码一起工作2)如果在/
之前有一个预期匹配,它将不起作用,3)如果没有月份,它不会只提取一年。谢谢我的问题解决了。非常感谢你的帮助。@AnandJyesth你应该接受其中一个答案或发布你自己的答案,所以将来有人会从这个问题中受益。谢谢我的问题解决了。非常感谢你的帮助。@AnandJyesth如果有任何答案解决了你的问题,别忘了接受它作为正确答案,因为它可以很容易地帮助其他人解决类似的问题。谢谢,我的问题已经解决了。非常感谢你的帮助。@AnandJyesth如果有任何答案已经解决了你的问题,不要忘记接受它作为正确答案,因为它可以很容易地帮助其他人解决类似的问题。