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ď č. 1Považ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