Strings
In de bio-informatica maken we erg veel gebruik van (tekst)zoekopdrachten. Deze zoekopdrachten zijn gericht op teksten in wetenschappelijke artikelen, of op patronen in DNA/RNA en eiwitten.
Textmining
Er is een heel vakgebied wat zich bezig houdt met zoekopdrachten in tekst Dit vakgebied – textmining – onderzoekt bijvoorbeeld of het mogelijk is nieuwe verbanden te vinden door teksten te analyseren
String functies
Er zijn veel verschillende string functies die we kunnen gebruiken:
- str.find(substr) Zoeken naar een substring
- str.replace(old, new) Vervanging van een substring
- str.split(delim) Splitsen op basis van een teken
- str.join(seq) Plakken van strings
- str.strip( ) Verwijderen van enters/nieuwe regels
- str.rstrip( ) Verwijderen van spaties rechts
- str.upper( ) Omzetten naar hoofdletters
- str.isupper( ) Toetsen of een string uit hoofdletters bestaat
- str.isdigit( ) Toetsen of een string uit cijfers bestaat
- str.isalpha() Toetsen of een string cijfers bevat
Regular expressions
Regular Expressions geven je de mogelijkheid om complexe tekstpatronen te zoeken
Regular Expressions zijn complexe zoekpatronen waarmee je complexe tekstpatronen kan zoeken (bijvoorbeeld zoeken naar substrings in strings).
De basis van een regular expression is het interpreteren van speciale karakters.
Vaak wordt “regular expression” afgekort tot “regexp”, “regex”, of “re”
Karakters in regular expressions:
| Karakter | Betekenis |
|---|---|
| . (punt) | Precies een willekeurig teken |
| ** * ** (asterisk) | 0, 1 of meer van het ingegeven teken |
| + (plus) | 1 of meer van het voorgaande teken |
| ? (vraagteken) | Exact 0 of 1 van het voorgaande teken |
| ^ (dakje) | Geeft aan dat het er mee moet beginnen |
| $ (dollar) | Geeft aan dat het er mee moet eindigen |
| [ ] | gegeven tekens aanwezig zijn Een ^ aan het begin van [^ ] geeft de inverse (dat dit NIET mag voorkomen) |
| ( ) | Een groep |
| ** \ ** | Escape |
| {m,n} | Minimaal m en maximaal n van het voorgaande teken |
Speciale escapes
| Speciaal karakter | Alternatief | |
|---|---|---|
| Decimal | \d | [0-9] |
| Spatie | \s | |
| Woord | \w |
Voorbeelden van regular expressions
| Regular Expression | Voorbeeld hits | Geen hit op |
|---|---|---|
| H[ea]llo | Hello en Hallo | Hollo |
| TATA[AT][AT] | TATAAT, TATATT, TATAAA | TATAGC |
| …huis (vier puntjes) | Woonhuis, koophuis, leeghuis | Ziekenhuis |
| .*huis | Ziekenhuis | Ziekenhuisje |
.****huis*. | huismus, Verhuis- service | Huizen |
| .+huis | Thuis | huis |
(33 en 34)
Overzicht re functies
| Functie | Functionaliteit |
|---|---|
| search | Zoeken naar een overeenkomst door de hele string heen |
| match | Zoeken naar een overeenkomst vanaf het begin |
| split | Splitsen op reguliere expressie |
| sub | Vervangen van een patroon |
re.search(pattern, string) Pattern is het te zoeken patroon: de reguliere expressie String is de tekst waarin je het patroon wilt vinden
re.sub(pattern, repl, string, max=0) Repl is waar het gevonden patroon door vervangen moet worden Max is het maximale aantal vervangingen. Indien weggelaten of ingesteld op 0, is er geen limiet aan het aantal splitsingen.
re.split(pattern, string, maxsplit=0,flags=0) Maxsplit is het maximale aantal splitsingen. Indien weggelaten of ingesteld op 0, is er geen limiet aan het aantal splitsingen. Flags is om het gedrag van de reguliere expressie te wijzigen, zoals re.IGNORECASE voor hoofdletterongevoelige matching. Indien weggelaten of ingesteld op 0, is er geen wijziging aan het gedrag van de reguliere expressie.
Een voorbeeld van Search:
import re
line = "AGGGGCCACATTAATGATGGAGTATAGGAGTA"
matchObj = re.search( r'ATG', line)
print (matchObj)
Hiermee zien we of er een hit is of niet Bij geen hit → None Bij wel een hit object referentie <re.Match object; span=(13, 16), match=‘ATG’>
Door de r voor de string blijft \n een \n en wordt het geen next line Vergelijk print (r”\t\n”) en print (“\t\n”)