42 | Cadenas de caracteres y plantillas |
Los patrones para cadenas de caracteres funcionan de manera muy parecida a los otros patrones en Wolfram Language, salvo que operan con secuencias de caracteres en cadenas en vez de partes de expresiones. En un patr
ón para cadena, pueden combinarse conceptos de patrones, tales como
_, con cadenas de caracteres como
"abc" usando
~~.
Con esto se eligen todos los casos de
+ seguidos de un solo car
ácter:
Ahora se eligen tres caracteres después de cada +:
Use el nombre x para el carácter después de cada +, y regrese ese carácter enmarcado:
En un patr
ón para cadena de caracteres,
_ representa cualquier car
ácter solo.
__ (
“doble gui
ón-bajo
”) representa cualquier secuencia de uno o m
ás caracteres, y
___ (
“triple gui
ón-bajo
”) representa cualquier secuencia de cero o m
ás caracteres.
__ y
___ generalmente atrapar
án tanto como puedan de la cadena.
Elija la secuencia de caracteres entre [ y ]:
__ normalmente hace la coincidencia con la secuencia de caracteres m
ás larga que se pueda:
Shortest fuerza la coincidencia m
ás corta:
StringCases elige los casos de un patr
ón dado en una cadena de caracteres.
StringReplace efect
úa sustituciones.
Efect
úe sustituciones en caracteres de la cadena:
Efect
úe sustituciones para patrones, usando
para calcular
ToUpperCase en cada caso:
Use
NestList para aplicar repetidamente una sustituci
ón en una cadena:
StringMatchQ prueba si una cadena coincide con un patr
ón.
Seleccione aquellas palabras comunes del inglés que coincidan con el patrón “comienza con a y termina con b":
Puede usarse
| y
.. en patrones para cadenas, de la misma forma que en patrones ordinarios.
Elija cualquier secuencia de A o B repetidas:
En un patr
ón para cadena,
LetterCharacter representa cualquier car
ácter que sea una letra,
DigitCharacter cualquier car
ácter que sea un d
ígito, y
Whitespace cualquier secuencia de espacios
“en blanco
”, tales como los espaciadores.
Elija las secuencias de caracteres dígitos:
Elija las secuencias de caracteres dígitos que tengan a cada lado un espacio en blanco:
En situaciones pr
ácticas es com
ún querer cambiar de cadenas de caracteres a listas, o viceversa. Puede separarse una cadena en una lista de porciones utilizando
StringSplit.
Separe una cadena en una lista de porciones, usando por defecto los espacios para hacer la separación:
Ahora se usa un patrón de cadena para decidir dónde hacer la separación:
Dentro de una cadena de caracteres, hay un car
ácter especial para un cambio de l
ínea, que indica en qu
é parte debe cambiar de l
ínea la cadena. Dicho car
ácter se representa con
\n.
Separe en cada cambio de línea:
StringJoin junta cualquier lista de cadenas de caracteres. Sin embargo, en la pr
áctica hay veces en que se quiere insertar algo entre las cadenas antes de juntarlas. Esto se hace con
StringRiffle.
Junte cadenas, intercalando la cadena "---" entre ellas:
Cuando se arma una cadena, frecuentemente se quiere convertir alguna expresi
ón arbitraria de Wolfram Language en una cadena de caracteres. Esto se puede hacer usando
TextString.
TextString convierte n
úmeros y otras expresiones de Wolfram Language en cadenas de caracteres:
Una manera m
ás conveniente de crear cadenas de caracteres a partir de expresiones es el uso de
plantillas para cadenas. Las plantillas para cadenas trabajan como funciones puras dado que tienen ranuras en las que pueden insertarse argumentos.
En una plantilla para cadena, cada
`` es una ranura para un argumento sucesivo:
Las ranuras con nombre eligen elementos de una asociaci
ón:
Se puede insertar cualquier expresi
ón en una plantilla para cadena encerr
ándola entre
<*...*>. El valor de la expresi
ón se calcula al momento de aplicar la plantilla.
Eval
úe la
<*...*> cuando se aplica la plantilla; no se requieren argumentos:
Use ranuras en la plantilla (
` es el car
ácter acento invertido):
La expresi
ón en la plantilla se eval
úa al aplicar la plantilla:
patt1~~patt2 | | secuencia de patrones de cadena de caracteres |
Shortest[patt] | | la cadena más corta que coincida |
StringCases[string,patt] | | los casos en una cadena de caracteres que coincidan con un patrón |
StringReplace[string,pattval] | | sustituye un patrón dentro de una cadena de caracteres |
StringMatchQ[string,patt] | | comprueba si una cadena de caracteres coincide con un patrón |
LetterCharacter | | forma de patrón que coincide con una letra |
DigitCharacter | | forma de patrón que coincide con un dígito |
Whitespace | | forma de patrón que coincide con espacios, etc. |
\n | | carácter que indica cambio de línea |
StringSplit[string] | | separa una cadena de caracteres en una lista de porciones |
StringJoin[{string1,string2, ...}] | | junta cadenas de caracteres |
StringRiffle[{string1,string2, ...},m] | | junta cadenas de caracteres, insertando m entre ellas |
TextString[expr] | | forma una cadena de texto a partir de algo |
StringTemplate[string] | | crea una plantilla de cadena de caracteres para aplicar |
`` | | ranura en una plantilla de cadena de caracteres |
< *...*> | | expresión para ser evaluada dentro de una plantilla de cadena de caracteres |
42.1Sustituya cada espacio en
"1 2 3 4" con
"---".
»
42.2Obtenga una lista ordenada de todas las secuencias de 4 d
ígitos (que posiblemente representan fechas) en el art
ículo de Wikipedia sobre
“computers
”.
»
42.3Extraiga los
“encabezados
” en el art
ículo de Wikipedia sobre
“computers
”, que se indican mediante cadenas de caracteres que comienzan y terminan con
"===".
»
42.4Use una plantilla para cadena de caracteres para hacer una rejilla con los resultados de la forma
i+j=... para
i y
j hasta el 9.
»
42.5Encuentre los nombres en ingl
és de aquellos enteros menores que 50 que contengan una
“i
” en alg
ún lugar antes de una
“e
”.
»
42.6Convierta a may
úsculas las palabras que consten de 2 letras en la primera oraci
ón del art
ículo de Wikipedia sobre
“computers
”.
»
42.7Haga una gr
áfica de barras, con etiquetas, del n
úmero de pa
íses cuyos nombres, formados con
TextString, comiencen con cada letra posible.
»
¿C
ómo se dice en voz alta
~~?
Por lo general se dice
“tilde tilde
”. La funci
ón subyacente es
StringExpression.
¿C
ómo se digita
`` para insertar una ranura en una plantilla de cadena de caracteres?
Es un par de acentos invertidos que, en muchos teclados, aparecen en el extremo superior izquierdo, junto con la ~ (tilde).
¿Se pueden escribir reglas para la comprensión de lenguaje natural?
S
í, pero el tema no se cubre en el libro. La funci
ón clave es
GrammarRules.
¿Qu
é hace
TextString cuando se encuentra con algo que no tiene una forma textual obvia?
Trata de lograr algo humanamente legible pero, si no puede, lo devuelve en t
érminos de
InputForm.
- Existe una correspondencia entre patrones para cadenas de caracteres y patrones para secuencias en listas. SequenceCases es el análogo para listas de StringCases para cadenas.
- La opción Overlaps especifica si se permiten superposiciones en coincidencias de cadenas de caracteres, o si no se permiten. Funciones diferentes tienen diferentes valores por defecto.
- Por defecto, los patrones para cadenas de caracteres dan coincidencia con las secuencias más largas; entonces, hay que especificar Shortest si se desea lo contrario. Por defecto, los patrones para expresiones dan coincidencia con las secuencias más cortas.
- Entre otras funciones para patrones de cadenas de caracteres, se tienen Whitespace, NumberString, WordBoundary, StartOfLine, EndOfLine, StartOfString y EndOfString.
- En cualquier parte de un patrón simbólico para cadena de caracteres, puede usarse RegularExpression para incluir sintaxis de expresiones regulares, tales como x* y [abc][def].
- TextString trata de lograr una versión textual de algo, que sea legible por personas, desechando cosas como los detalles de gráficas. ToString[InputForm[expr]] da una versión completa, que pueda usarse para entrada subsecuente.
- Pueden compararse cadenas de caracteres usando operaciones tales como SequenceAlignment. Esto es especialmente útil en la bioinformática.
- FileTemplate, XMLTemplate y NotebookTemplate hacen lo análogo de StringTemplate para archivos, documentos XML (y HTML) y cuadernos.
- Wolfram Language incluye la función TextSearch, para hacer búsquedas de texto en colecciones grandes de archivos.