如何用索引位置替换句子中的字符串

时间:2018-04-30 20:34:55

标签: python string python-3.x pandas

如何将给定句子中的匹配子字符串移动到句子的开头?

col1始终是小写的。

我有:

col1      col2                          output
mmm2      Hello I want Mmm2 replace it  Mmm2 Hello I want replace it
mmm5      I want MMM5 replace it        MMM5 I want replace it
mmm1      I mmm1 want replace it        mmm1 I want replace it

3 个答案:

答案 0 :(得分:0)

一种方法:

start_index = string.lower().index(target)
new_string = target+string[0:start_index]+string[start_index+len(target):]

如果target不在string中,则会抛出错误,如果有多个,则只会移动第一个实例。

答案 1 :(得分:0)

不确定这是否是正确的做法。我正在使用正则表达式来获得所需的输出。

<强>演示:

import pandas as pd
import re
df = pd.DataFrame({"col1": ["mmm2", "mmm5"], "col2": ["Hello I want Mmm2 replace it", "I want MMM5 replace it"]})

df["output"] = df.apply(lambda row: re.sub(row["col1"], "", row["col2"], flags=re.IGNORECASE), axis=1)
df["output"] = df.apply(lambda row: "{0} {1}".format(re.search(row["col1"], row["col2"], flags=re.IGNORECASE).group(0), row["output"]), axis=1)

print(df)

<强>输出:

   col1                          col2                         output
0  mmm2  Hello I want Mmm2 replace it  Mmm2 Hello I want  replace it
1  mmm5        I want MMM5 replace it        MMM5 I want  replace it

答案 2 :(得分:0)

一种解决方案是使用list.insertlist.pop将您的单词移至开头。这可以与pd.DataFrame.apply结合使用。

来自@Rakesh的数据。

import pandas as pd

def transporter(row):
    split = row['col2'].split()
    idx = next((i for i, j in enumerate(split) if j.lower() == row['col1']), None)
    if not idx:
        return row['col2']
    else:
        split.insert(0, split.pop(idx))
        return ' '.join(split)

df = pd.DataFrame({"col1": ["mmm2", "mmm5"],
                   "col2": ["Hello I want Mmm2 replace it", "I want MMM5 replace it"]})

df['col2'] = df.apply(transporter, axis=1)

print(df)

   col1                          col2
0  mmm2  Mmm2 Hello I want replace it
1  mmm5        MMM5 I want replace it