Pandas DataFrame-提取两个字符串之间的字符串,并包含第一个定界符

时间:2020-02-04 18:42:34

标签: python string pandas dataframe extract

我在数据框的列中有以下字符串:

tempDir

我想提取单词FILE和“。”之间的所有内容。但是我想包括第一个定界符。基本上,我试图返回以下结果:

"LOCATION: FILE-ABC.txt"
"DRAFT-1-FILENAME-ADBCD.txt"

为此,我正在使用以下脚本:

"FILE-ABC"
"FILENAME-ABCD"

但是我无法返回所需的信息(总是不适用)。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

您可以在正则表达式中完成所有这些操作,而不必使用字符串切片。

df['field'] = df.string_value.str.extract('(FILE.*(?=.txt))')
  • FILE是我们开始比赛的
  • 。*可以捕获任意数量的字符
  • (?=)是一个先行断言,匹配时不带 消费。

便捷的正则表达式工具https://pythex.org/

答案 1 :(得分:2)

如果字符串始终以.txt结尾,则可以尝试以下操作:

df['field'] = df['string_value'].str.extract('(FILE.*)')[0].str[:-4]

示例:

import pandas as pd
text = ["LOCATION: FILE-ABC.txt","DRAFT-1-FILENAME-ADBCD.txt"]
data = {'index':[0,1],'string_value':text}
df = pd.DataFrame(data)
df['field'] = df['string_value'].str.extract('(FILE.*)')[0].str[:-4]

输出:

   index                string_value           field
0      0      LOCATION: FILE-ABC.txt        FILE-ABC
1      1  DRAFT-1-FILENAME-ADBCD.txt  FILENAME-ADBCD

答案 2 :(得分:2)

您可以创建一个捕获组,以从'FILE'贪婪地捕获到最后一个期间。或者,您可以使其不贪婪,使其在FILE之后的第一个.处停止。

import pandas as pd
df = pd.DataFrame({'string_value': ["LOCATION: FILE-ABC.txt", "DRAFT-1-FILENAME-ADBCD.txt",
                                    "BADFILENAME.foo.txt"]})

df['field_greedy'] = df['string_value'].str.extract('(FILE.*)\.')
df['field_not_greedy'] = df['string_value'].str.extract('(FILE.*?)\.')

print(df)
                 string_value    field_greedy field_not_greedy
0      LOCATION: FILE-ABC.txt        FILE-ABC         FILE-ABC
1  DRAFT-1-FILENAME-ADBCD.txt  FILENAME-ADBCD   FILENAME-ADBCD
2         BADFILENAME.foo.txt    FILENAME.foo         FILENAME