Google Scriptを使用して、正規表現を使用して特定の単語制限内の他の単語を検索するときに単語を除外するにはどうすればよいですか?

ジョセフ・ダビット

ここには非常に経験の浅いコーダーがいます。正規表現を使用して、検索などの単語制限内で、互いに10語以内の単語を検索するスクリプトがword1ありword2ます。次に、結果をスプレッドシートに印刷します。ただし、10語以内にない場合、10語以内で検索するなど、除外基準をスクリプトに含める方法を見つけようword1しています。ネガティブルックアヘッドを使用して除外基準を含めることができたと思いますが、含めると、単語制限が機能しなくなります。これが私のスクリプトです:word2word3

function regexwithsheetpop() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var historySheet = ss.getSheetByName('Sheet1');  
  var resultsSheet = ss.getSheetByName('Results1');
  var totalRowsWithData = historySheet.getDataRange().getNumRows();
  var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues(); 
  var regexp = /^((?!dispute).)*([\W*(the)\s+(\w+\s+){0,10}(account)])$|^((?!dispute).)*([(account)\s+(\w+\s+){0,10}(the)])$/i;
  var result = []; 
  for (var i = 0; i < data.length; i += 1) {
    var row = data[i];
    var column = row[0];
    if (regexp.exec(column) !== null) {
        result.push(row);
    }
  }
  if (result.length > 0) {
    var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows();
    resultsSheetDataRows = resultsSheetDataRows === 1 ? resultsSheetDataRows : resultsSheetDataRows + 1; 
    var resultsSheetRange = resultsSheet.getRange(resultsSheetDataRows, 1, result.length, 3);
    resultsSheetRange.setValues(result);
  }
}

除外基準のない私の作業コードは次のとおりです。

function regexwithsheetpop() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var historySheet = ss.getSheetByName('Sheet1');  
var resultsSheet = ss.getSheetByName('run,use,card');
var totalRowsWithData = historySheet.getDataRange().getNumRows();
var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues(); 
var regexp = /\W*(account)\W*\s+(\w+\s+){0,10}(the)|(the)\s+(\w+\s+){0,10}(account)/i;
var result = []; 
for (var i = 0; i < data.length; i += 1) {
     var row = data[i];
     var column = row[0];
     if (regexp.exec(column) !== null) {
        result.push(row); }}
if (result.length > 0) {
    var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows();
    resultsSheetDataRows = resultsSheetDataRows === 1 ? resultsSheetDataRows : resultsSheetDataRows + 1; 
    var resultsSheetRange = resultsSheet.getRange(resultsSheetDataRows, 1, result.length, 3);
  resultsSheetRange.setValues(result);}}

ziganotschka

特定の単語がセルに含まれているかどうかだけを知りたい場合は、正規表現は必要ありません。

IndexOf()の使用ははるかに簡単です

サンプル:

if(column.indexOf("dispute")!=-1){
  Logger.log("Column contains dispute");
  }
else if (regexp.exec(column) !== null) {
  result.push(row); 
}

これにより、「論争」をregexp定義に組み込む必要がなくなります

それをあなたのコードに適用する:

function regexwithsheetpop() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var historySheet = ss.getSheetByName('Sheet1');  
  var resultsSheet = ss.getSheetByName('Results1');     //mind the name
  var totalRowsWithData = historySheet.getDataRange().getNumRows();
  var data = historySheet.getRange(1, 1, totalRowsWithData, 3).getValues(); 
  var regexp = /\W*(account)\W*\s+(\w+\s+){0,10}(the)|(the)\s+(\w+\s+){0,10}(account)/i;
  var result = []; 
  for (var i = 0; i < data.length; i += 1) {
     var row = data[i];
     var column = row[0];
     if(column.indexOf("dispute")!=-1){
       Logger.log("Column in row "+(i+1)+" contains dispute");
     } else if (regexp.exec(column) !== null) {
        result.push(row); }
  }
  if (result.length > 0) {
     var resultsSheetDataRows = resultsSheet.getDataRange().getNumRows();
     resultsSheetDataRows = resultsSheetDataRows === 1 ? resultsSheetDataRows : resultsSheetDataRows + 1; 
     var resultsSheetRange = resultsSheet.getRange(resultsSheetDataRows, 1, result.length, 3);
     resultsSheetRange.setValues(result);
  }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ