使用regex-python进行模式匹配

2024-05-19 01:46:35 发布

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

以下是文本示例:

  • 美国心理协会。(2016). 中心 抑郁症流行病学研究(CESD)。12月7日检索, 2016年,来自美国心理协会,http://www.apa.org/pi/ 关于/出版物/医务人员/实践设置/ 评估/工具/抑郁量表.aspx
  • Beattie,G.S.(2005年11月)抑郁的社会原因。 2017年5月31日检索自http:// www.personalityresearch.org/papers/beattie.html

我想要我尝试过的文本的粗体部分:

/\)\.|\s[a-zA-Z]+\./

在这里,我查找“)”然后“.”然后是“空格”,然后是文本直到“.”

基本上,我想要两个点之间的文本,因为这是论文的标题,在作者或出版物之后开始,括号中有年份,如示例中所述。但是上面的pattern并没有给出我想要的

有人能帮我解释为什么它不起作用,还有什么其他方法可以在我的dataframe列中找到这样的文本


Tags: 工具org文本http示例wwwpi中心
2条回答

您可以将以下正则表达式与Series.str.extract一起使用:

\)\.\s+([^.]+)

regex demo

详细信息

  • \)\.-).子串
  • \s+-1+空格
  • ([^.]+)-第1组:点以外的一个或多个字符

在熊猫中,你可以像这样使用它

df['res_col'] = df['orig_col'].str.extract(r'\)\.\s+([^.]+)', expand=False)

根据评论更新

允许任何已知缩写的更具体的正则表达式是

[\d)]\.\s*((?:\ba\.k\.a\.|[^.])+)

another regex demo。详情:

  • [\d)]-数字或)
  • \.-一个点
  • \s*-0个或多个空格
  • ((?:\ba\.k\.a\.|[^.])+)-第1组:a.k.a.子字符串作为一个整字或除点以外的任何字符出现一次或多次

试试这个

(?<=\)\.)[\w\s\(\)]*(?=\.)
  • (?<=\)\.)是一种查找后面的搜索,用于检查“)”前面是否有)
  • [\w\s\(\)]*允许所有单词和空格字符以及(和)字符
  • (?=\.)是一个用于检查chracter的前瞻性搜索

您可以测试它here

enter image description here

相关问题 更多 >

    热门问题