【发布时间】:2016-02-18 23:51:14
【问题描述】:
最奇怪的问题..我明白了。
基本上有一个事件日志,上面写着“Johno 已将他的名字改为 Johna”(示例)
我想要一个脚本,它将 A:A 列中的“Johno”更改为 Johna(基于最后一个单词)
【问题讨论】:
-
欢迎来到Stack Overflow。请通过tour 和结帐How to Ask 了解本网站的原理。
标签: regex google-sheets
最奇怪的问题..我明白了。
基本上有一个事件日志,上面写着“Johno 已将他的名字改为 Johna”(示例)
我想要一个脚本,它将 A:A 列中的“Johno”更改为 Johna(基于最后一个单词)
【问题讨论】:
标签: regex google-sheets
试试这个:
function onEdit(e)
{
var sheet = SpreadsheetApp.getActiveSheet();
var editRange = sheet.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var lr = sheet.getLastRow()
var range = sheet.getRange("B:B");//only run when column B is changed
var rangeRowStart = range.getRow();
var rangeRowEnd = rangeRowStart + range.getHeight()-1;
var rangeColStart = range.getColumn();
var rangeColEnd = rangeColStart + range.getWidth()-1;
if (editRow >= rangeRowStart && editRow <= rangeRowEnd
&& editCol >= rangeColStart && editCol <= rangeColEnd)
{
var range = e.range;
var val=e.range.getValue()//get sentence
var name=val.split(" ").slice(-1)//get the last word
var row = sheet.getActiveCell().getRowIndex();//get changed row number
sheet.getRange(row,1 ).setValue(name);//set the name in column A
}}
【讨论】:
您需要使用regular expression。
为了匹配第一个单词,语法是^\w*,所以=regexextract("hello world","^\w*")会给你“hello”
要匹配最后一个单词,语法是\w*\z 或\w*$,所以=regexextract("hello world","\w*$") 会给你“世界”
为了用第一个单词替换最后一个单词,我测试了以下内容
=regexreplace(
"hello brave new world",
"\w*$",
regexextract("hello brave new world", "^\w*")
)
不幸的是,它给了我“你好勇敢的新你好”。它看起来像一个错误(我在 Javascript 中测试了类似的代码,并得到了预期的“你好勇敢的新你好”)。
所以解决方法类似于
=REGEXREPLACE(A1 &".","(\w*[.])",REGEXEXTRACT(A1,"^\w*"))
首先添加“。”到字符串的结尾,然后搜索后面跟“.”的任何单词。而是。
【讨论】: