/ / Aký by bol dobrý a užívateľsky príjemný spôsob filtrovania reťazcov pomocou stručných, logických pravidiel? - reťazec, zoznam, filter

Aký by bol dobrý a užívateľsky príjemný spôsob filtrovania reťazcov pomocou stručných, logických pravidiel? - reťazec, zoznam, filter

Mám zoznam reťazcov a chcem ich filtrovať pomocou niektorých pravidiel. Všetky reťazce, ktoré prechádzajú filtrovaním, sa pripoja k novému zoznamu reťazcov. Príkladom pravidla by mohlo byť prechod reťazec, ak obsahuje X alebo ak obsahuje Y a Z. Viem, že môžem kódovať tieto veci pomocou Pythonu if vyhlásenia atď., ale existuje skôr stručný a užívateľsky prívetivý spôsob, ako robiť tento druh filtrovania? Existuje nejaký (možno SQL-like) jazyk pre robenie takýchto vecí?

# Accept or filter specified datasets.
filterDatasets = False
if filterDatasets:
# Filter specified datasets.
datasets = []
# Cycle over all datasets specified.
logger.info("filtering specified datasets")
for dataset in datasetsSpecified:
# If data was specified, then skip a specified dataset if its name
# does not contain "data12" or "merge". If data was not specified,
# then skip a specified dataset if its name does not contain "mc12".
if isData:
requiredSubstrings = [
#"data12",
"Egamma",
"Muons",
#"merge",
]
for substring in requiredSubstrings:
if substring not in dataset:
logger.debug("substring {substring} not in dataset name {dataset}".format(substring = substring, dataset = dataset))
continue
else:
datasets.append(dataset)
else:
requiredSubstrings = [
"mc12"
]
for substring in requiredSubstrings:
if substring not in dataset:
logger.debug("substring {substring} not in dataset name {dataset}".format(substring = substring, dataset = dataset))
continue
else:
datasets.append(dataset)
excludedSubstrings = [
"#"
]
for substring in excludedSubstrings:
if substring in dataset:
logger.debug("substring {substring} in dataset name {dataset}".format(substring = substring, dataset = dataset))
continue
else:
datasets = datasetsSpecified
logger.info("datasets accepted: {datasets}".format(datasets = datasets))

odpovede:

0 pre odpoveď č. 1

Považujem regulárne výrazy za "SQL" textových reťazcov - takmer akékoľvek spracovanie textu, ktoré si môžete vymyslieť:

http://rick.measham.id.au/paste/explain.pl?regex=hello|[a-z]%2Bbye

Príklady toho, čo sa zhoduje s týmto:

  • Ahoj
  • Zbohom
  • hellobye
  • bbye

Príklady, ktoré sa nezhodujú s týmto:

  • peklo
  • Ello
  • zbohom
  • zbohom

Jednoducho spustite každú položku v zozname prostredníctvom regulárneho výrazu a ponechajte ju, ak je to zhoda.

Nie je to ťažký užívateľ Pythonu sám (len príležitostne), ale podľa dokumentácie je pre nich podpora: https://docs.python.org/2/library/re.html