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'
呢?