如何将给定句子中的匹配子字符串移动到句子的开头?
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
答案 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.insert
和list.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