- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图使用正则表达式在Python中的括号之间找到正确的名称和日期,但由于某种原因似乎对我不起作用。虽然我希望这是一个简单的答案,但它却让我困惑不已。谁能提供解决方案吗?
我使用的是Python 3.7。该数据集由从学术文章中提取的文本组成。我想提取总是出现在引用句子末尾的作者姓名和出版日期。我想将其放入一个列表中,然后将其存储在 pandas 数据框中。
一个典型的句子是,
“青少年暴力的相关因素仍处于初步了解状态,并且通常默认为 SES 变量(Sheffield,1998)。”
我试图提取的是(Sheffield,1998)类型的数据。它总是会以这种模式出现。我的预期输出是
[(谢菲尔德,1998)]
我当前的代码是:
import re
test_text = ['Sentence 1 (Author, 2019).',
'Sentence 2 (Another Author, 2020)',
'Sentence 3 (First Author & Second Author, 2018)',
'Sentence 4 (Author, 2019; Another Author, 2020; Fourth Author, 2017)']
test_list = []
for elem in test_text:
test_run = re.findall(r'\((\D+), (\d+)\w*\)', str(elem))
if test_run: #if something was found
test_list.append(test_run)
print(elem) #print out to see what is going on
print(str(test_run), '\n') #print out to see what is going on
print("FULL LIST OF PULL:\n", test_list)
现在,当我运行这个时,正则表达式可以很好地提取前三个句子示例,但不能提取第四个句子示例。
我感谢任何建议或帮助。仍在学习正则表达式和Python(正如我的代码可能显示的那样)。如果有更好的方法来做到这一点而不涉及正则表达式,我愿意学习。
提前谢谢您。
最佳答案
一种方法是使用模式并使用捕获组 ([^()]+)
和匹配除 (< 之外的任何字符的否定字符类) 来提取括号之间的内容
或)
。这是一个有点宽泛的模式:
\(([^()]+)\)
您可以通过指定允许使用字符类和重复组来使其更具体,以更接近数据的格式:
\((\w+(?: [\w&]+)*, \d{4}(?:; \w+(?: [\w&]+)*, \d{4})*)\)
\(
匹配 (
(
捕获组 1
\w+
匹配 1 个以上单词字符,(?: [\w&]+)*,\d{4}
重复 0+ 次空格、1+ 个单词字符或 &
、空格和4 位数字(?:;\w+(?: [\w&]+)*,\d{4})*
在 之前重复前面的模式 0 次以上;
)
关闭群组\)
匹配 )
import re
test_text = ['Sentence 1 (Author, 2019).',
'Sentence 2 (Another Author, 2020)',
'Sentence 3 (First Author & Second Author, 2018)',
'Sentence 4 (Author, 2019; Another Author, 2020; Fourth Author, 2017)']
test_list = []
pattern = r'\(([^()]+)\)'
for elem in test_text:
for splitOne in re.search(pattern, elem).group(1).split(";"):
for splitTwo in splitOne.split(":"):
test_list.append(splitTwo.strip())
print("FULL LIST OF PULL:\n", test_list)
输出
FULL LIST OF PULL:
['Author, 2019', 'Another Author, 2020', 'First Author & Second Author, 2018', 'Author, 2019', 'Another Author, 2020', 'Fourth Author, 2017']
或者使用例如 this Python demo 创建列表列表.
另一个选择是使用 PyPi regex module它支持在lookbehind中使用量词。
例如:
(?<=\([^()]*)\w+(?: [\w&]+)*, \d+(?=[^\r\n()]*\))
该模式在左侧断言一个开始 (
,并在右侧断言结束 )
,其中匹配单词字符和数字的模式在中间匹配模式。
Regex demo (选择 Javascript 仅用于演示目的)|或者查看Python demo
关于正则表达式 Python 在 ( ) 之间拉动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532381/
我有一个包含 5 个选项卡的选项卡栏,每个选项卡都包含一些数据。当用户下拉刷新时,我想显示一个刷新指示器,并且选项卡内的数据应该通过 API 调用进行更新。下面是我到目前为止尝试过的代码。 帮助我了解
我正在尝试使用 CollapsingToolbarLayout 和 AppBarLayout 底部的其他 View 来创建以下行为,但是当我滚动时栏没有折叠/展开/拉动 PullView,这意味着在使
我正在尝试在 React Native 中构建类似于 IMessage 和 WhatsApp 标题的内容,用户可以向下拉以显示标题中的搜索栏。 我已经能够向下拉以显示隐藏的输入,但由于 ScrollV
我希望让我的页面具有响应性,添加了 Bootstrap 并将我的两个 div 排成一行,放在一个流体容器中。 我尝试向左按钮添加向右拉/向右浮动,向右图像向左拉/向左浮动,但它们没有移动。 我没有使用
如何使用简单的饼图从下面的 s:variant 块中获取标题标签? product_variants-96590662 Default Title 10.00 002 0 我已
我已经编写了一些代码,使用 Instagram 图形 API 从 Instagram 中提取图像。一切工作正常,但性能很慢。我正在使用 JavaScript,但也遇到了同样的问题,但使用 PHP 时情
我是一名优秀的程序员,十分优秀!