Что эквивалентно сценарию Google Apps для Python re.fullmatch? - PullRequest
0 голосов
/ 27 апреля 2020

Я написал скрипт на python, который функционирует именно так, как мне нужно, но не похоже, что в Google Apps Script есть метод полного соответствия regex в документации. По сути, у меня есть введенная пользователем строка, и я хотел бы убедиться, что строка полностью соответствует регулярному выражению; "полный матч". Я достаточно знаком со скриптом Google Apps, чтобы конвертировать скрипт python в GAS, но мне нужна помощь с рабочим процессом, и, возможно, другой логический подход к этому заданному GAS, похоже, не имеет полного соответствия. Код ниже - скрипт python для справки.

import re

def is_valid(text, valid_styles):

    good_string_found = re.fullmatch(r'(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+', text)

    if good_string_found is None:
        return False, 1

    for each_item in text.split(";\n")[: len(text.split(";\n")) - 1]:

        style_number, size = each_item.split(" - ")[0], each_item.split(" - ")[1]
        valid_sizes = ["4","5","6","6x","7","8","10","12","14","16"]

        if style_number not in valid_styles or size not in valid_sizes:
            print("First error found in: " + style_number + " - " + size)
            return False, 2

    return True, 0

user_entry = "CS 101 - 8;\nCS 102 - 10;\nCS 104 - 6x;\n"
valid_style_numbers = ["CS 101", "CS 102", "CS 103", "CS 104"]
validity, error = is_valid(user_entry, valid_style_numbers)

if validity is False and error == 1:
    print("User entered string did not:\n- Match regex expected input")
elif validity is False and error == 2:
    print("User entered string did not:\n- Contain a valid style number\n- Contain a valid size")
elif validity is True:
    print("Proper scan")

1 Ответ

1 голос
/ 27 апреля 2020

Я считаю, что ваша цель заключается в следующем.

  • Вы хотите преобразовать свой сценарий python в сценарий Google Apps.

Для этого, как насчет этого ответа?

В этом ответе для проверки полного соответствия text используется регулярное выражение ^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$. И test используется для этой ситуации.

Пример сценария 1:

Это тестовый сценарий для полного соответствия.

const text1 = "CS 101 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
const res1 = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text1);
console.log(res1)

const text2 = "CS 1foo01 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
const res2 = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text2);
console.log(res2)
  • Я думаю, что также можно использовать ^([A-Z]+\s[0-9]+\s-\s[0-9]+x?;\n)+$.

Пример сценария 2:

Когда ваш python скрипт конвертируется в Google Apps Script, он становится следующим:

function is_valid(text, valid_styles) {
  const good_string_found = (/^(([A-Z]+)\s([0-9]+)\s-\s([0-9]+)x?;\n)+$/).test(text);
  if (!good_string_found) return [false, 1];
  let items = text.split(";\n");
  items.pop();
  for (let i = 0; i < items.length; i++) {
    const each_item = items[i];
    const [style_number, size] = [each_item.split(" - ")[0], each_item.split(" - ")[1]];
    const valid_sizes = ["4","5","6","6x","7","8","10","12","14","16"];
    if (!valid_styles.includes(style_number) || !valid_sizes.includes(size)) {
      console.log("First error found in: " + style_number + " - " + size);
      return [false, 2];
    }
  }
  return [true, 0];
}

// Please run this function.
function main() {
  const user_entry = "CS 101 - 18;\nCS 102 - 10;\nCS 104 - 6x;\n";
  const valid_style_numbers = ["CS 101", "CS 102", "CS 103", "CS 104"];
  const [validity, error] = is_valid(user_entry, valid_style_numbers);
  if (!validity && error == 1) {
    console.log("User entered string did not:\n- Match regex expected input");
  } else if (!validity && error == 2) {
    console.log("User entered string did not:\n- Contain a valid style number\n- Contain a valid size")
  } else if (validity) {
    console.log("Proper scan")
  }
}

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...