Python 根据单词之间的数字范围选择字符串

Python 根据单词之间的数字范围选择字符串,python,regex,Python,Regex,我正在尝试编写一个与数据帧中的列相匹配的正则表达式。dataframe中的所有列都是 cols = ['after_1', 'after_2', 'after_3', 'after_4', 'after_5', 'after_6', 'after_7', 'after_8', 'after_9', 'after_10', 'after_11', 'after_12', 'after_13', 'after_14', 'after_15', 'after_16', 'after

我正在尝试编写一个与数据帧中的列相匹配的正则表达式。dataframe中的所有列都是

    cols = ['after_1', 'after_2', 'after_3', 'after_4', 'after_5', 'after_6',
   'after_7', 'after_8', 'after_9', 'after_10', 'after_11', 'after_12',
   'after_13', 'after_14', 'after_15', 'after_16', 'after_17', 'after_18',
   'after_19', 'after_20', 'after_21', 'after_22', 'after_10_missing',
   'after_11_missing', 'after_12_missing', 'after_13_missing',
   'after_14_missing', 'after_15_missing', 'after_16_missing',
   'after_17_missing', 'after_18_missing', 'after_19_missing',
   'after_1_missing', 'after_20_missing', 'after_21_missing',
   'after_22_missing', 'after_2_missing', 'after_3_missing',
   'after_4_missing', 'after_5_missing', 'after_6_missing',
   'after_7_missing', 'after_8_missing', 'after_9_missing']
我想选择字符串中值在1-14之间的所有列

此代码有效

df.filter(regex = '^after_[1-9]$|after_([1-9]\D|1[0-4])').columns
但是我想知道如何把它分成一行,而不是分成两行。第一部分选择以1到9之间的数字结尾的所有字符串,即“在_1”之后…”在_9'之后,但不是他们失踪的对手。|后面的第二部分选择以“after”开头、介于1和9之间、后跟单词字符的任何字符串,或以1开头、后跟0-4的任何字符串

有没有更好的方法写这个

我已经试过了

    df.filter(regex = 'after_([1-9]|1[0-4])').columns
但这会拾取以1或2开头的字符串,即“after_20”

试试这个:after_[1-9]| 1[0-4][a-zA-Z]*\b


你的意思是r'\bafter_?:[1-9]| 1[0-4]\b'?不,如果数字在范围内,我还想包括后跟_missing的列。谢谢,这很有效,我可以看到如何将其推广到其他情况,在这些情况下,我需要在字符串中的单词之间找到一个数字范围。我以为函数会将我的模式与字符串匹配,但我需要指定模式后面可以跟数字字符。
import re
regexp = '''(after_)([1-9]|1[0-4])(_missing)*\\b'''
cols = ['after_1', 'after_14', 'after_15', 'after_14_missing', 'after_15_missing', 'after_9_missing']

for i in cols:
 print(i , re.findall(regexp, i))