s1~~s2~~ or StringExpression[s1,s2,]

represents a sequence of strings and symbolic string objects si.


  • "str1"~~"str2"~~ yields an ordinary string obtained by concatenating the characters in the "stri".
  • The following objects can appear in StringExpression:
  • "string"a literal string of characters
    _any single character
    __any substring of one or more characters
    ___any substring of zero or more characters
    x_, x__, x___ substrings given the name x
    x:patternpattern given the name x
    pattern..pattern repeated one or more times
    pattern...pattern repeated zero or more times
    {patt1,patt2,} or patt1|patt2|a pattern matching at least one of the patti
    AnyOrder[patt1, patt2, ]a pattern matching all of the patti in any order
    FixedOrder[patt1, patt2, ]a pattern matching the concatenation of the patti
    patt/;conda pattern for which cond evaluates to True
    pattern?testa pattern for which test yields True for each character
    Whitespacea sequence of whitespace characters
    NumberStringthe characters of a number
    DatePattern[spec]the characters of a date
    charobjan object representing a character class (see below)
    RegularExpression["regexp"]substring matching a regular expression
    StringExpression[]an arbitrary string expression
  • The following represent classes of characters:
  • {c1,c2,}any of the "ci"
    Characters["c1c2"]any of the "ci"
    CharacterRange["c1","c2"]any character in the range "c1" to "c2"
    HexadecimalCharacterhexadecimal digit 0-9, a-f, A-F
    DigitCharacterdigit 09
    WhitespaceCharacterspace, newline, tab, or other whitespace character
    WordCharacterletter or digit
    Except[p]any character except ones matching p
  • The following represent positions in strings:
  • StartOfStringstart of the whole string
    EndOfStringend of the whole string
    StartOfLinestart of a line
    EndOfLineend of a line
    WordBoundaryboundary between word characters and others
    Except[WordBoundary]anywhere except a word boundary
  • When constructs like __ or .. are present, there may be several different ways in which a given StringExpression can match a particular string.
  • By default, the Wolfram Language will use the one that makes pattern elements that appear earlier in the StringExpression match the longest possible substrings.
  • The following determine which match will be used if there are several possibilities:
  • Shortest[p]the shortest consistent match for p
    Longest[p]the longest consistent match for p (default)
  • In matching ordinary expressions instead of strings, the shortest instead of the longest consistent match is used.
  • StringExpression objects can be used in many string manipulation functions, including StringReplace, StringCases, StringSplit, and StringMatchQ.
  • StringExpression has attributes Flat and OneIdentity.


open allclose all

Basic Examples  (2)

A string expression representing the string "ab" followed by any single character:

This makes a replacement for each occurrence of the string pattern "ab"~~__:

Give all pairs of identical characters in the string:

Scope  (5)

A single blank (_) stands for any single character:

Double blank (__) stands for any sequence of one or more characters:

Triple blank (___) stands for any sequence of zero or more characters:

Use AnyOrder to match patterns in any order:

Assigning a matching AnyOrder to a variable preserves the order in the string:

Applications  (1)

Find the primes with four identical digits:

By converting to strings, you can use StringMatchQ:

Properties & Relations  (1)

StringExpression objects can be used in many string manipulation functions:

Wolfram Research (2004), StringExpression, Wolfram Language function, (updated 2014).


Wolfram Research (2004), StringExpression, Wolfram Language function, (updated 2014).


Wolfram Language. 2004. "StringExpression." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014.


Wolfram Language. (2004). StringExpression. Wolfram Language & System Documentation Center. Retrieved from


@misc{reference.wolfram_2024_stringexpression, author="Wolfram Research", title="{StringExpression}", year="2014", howpublished="\url{}", note=[Accessed: 15-July-2024 ]}


@online{reference.wolfram_2024_stringexpression, organization={Wolfram Research}, title={StringExpression}, year={2014}, url={}, note=[Accessed: 15-July-2024 ]}