Python 在符合特定条件的字符串中搜索子字符串

Python 在符合特定条件的字符串中搜索子字符串,python,regex,pandas,Python,Regex,Pandas,这是我另一篇文章的延续: 总之,我有一些存储在数据帧中的字符串,我想提取匹配所有条件的第一个数字(如果存在)。以下是条件: for index, row in df.iterrows(): test = re.search(r'(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)', row['name']) if test: df.loc[ df

这是我另一篇文章的延续:

总之,我有一些存储在数据帧中的字符串,我想提取匹配所有条件的第一个数字(如果存在)。以下是条件:

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()
  • 数字不能位于字符串的开头

  • 它不能出现在“否”或“问题”之后

  • 该数字不能介于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()
为了说明这个数字不在1960年和2020年之间,但它似乎不起作用。我也不知道如果e在那里怎么抓

例1:

"Trial No. 32819 Question 485 Article 787e"
我希望正则表达式返回

[787e]
None
[217]
例2:

"2981 XYZ Legislature"
我希望正则表达式返回

[787e]
None
[217]
例3“

我希望正则表达式返回

[787e]
None
[217]
提前感谢您的帮助!

您可以使用

(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(?<!\d)(?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d))(\d+(?!\d)e?)
(?!^)(?)?
见

新零件是
(?:

  • (?-当前位置左边不允许有数字
  • (?!(?:19[6-9][0-9]| 20[01][0-9]| 2020)(?!\d))
    -如果在当前位置的右侧有一个从
    1960
    2020
    之间的数字没有跟在后面,则会导致匹配失败
  • (\d+(?!\d)e?
    -第1组(您将提取的内容):1+个数字,后面没有数字和可选的
    e
    字母
您可以使用

(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(?<!\d)(?!(?:19[6-9][0-9]|20[01][0-9]|2020)(?!\d))(\d+(?!\d)e?)
(?!^)(?)?
见

新零件是
(?:

  • (?-当前位置左边不允许有数字
  • (?!(?:19[6-9][0-9]| 20[01][0-9]| 2020)(?!\d))
    -如果在当前位置的右侧有一个从
    1960
    2020
    之间的数字没有跟在后面,则会导致匹配失败
  • (\d+(?!\d)e?
    -第1组(您将提取的内容):1+个数字,后面没有数字和可选的
    e
    字母

你可以试试
r'(?!^)(?关于
'1975e'
呢?你可以试试
r'(?!^)(?关于
'1975e'
呢?