【发布时间】:2019-06-26 03:14:13
【问题描述】:
这是我其他帖子的延续:Extracting numbers from a string under certain conditions
总而言之,我有一些字符串存储在数据框中,我想提取与所有条件匹配的第一个数字(如果存在)。以下是条件:
数字不能在字符串的开头
它不能出现在“No.”一词之后或“Question”一词之后
数字不能介于 1960 - 2020 之间
如果数字后面紧跟字母e,我想 用它提取 e
这是我到目前为止找到的数字,它处理前两个条件:
for index, row in df.iterrows():
test = re.search(r'(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)',
row['name'])
if test:
df.loc[
df['name'] == row['name'], ['id']] = test.group()
我也尝试过使用:
\b(?!196[0-9]\d|20[012][0])\d+\b
考虑到数字不在 1960 年和 2020 年的值之间,但它似乎不起作用。如果 e 存在,我也不明白如何捕捉它。
示例 1:
"Trial No. 32819 Question 485 Article 787e"
我希望正则表达式返回
[787e]
示例 2:
"2981 XYZ Legislature"
我希望正则表达式返回
None
示例 3"
"Addendum217Null"
我希望正则表达式返回
[217]
提前感谢您的帮助!
【问题讨论】:
-
你可以试试
r'(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(?<!\d)(?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d))(\d+(?!\d)e?)' -
'1975e'呢?