s1~~s2~~… or StringExpression[s1,s2,…]
represents a sequence of strings and symbolic string objects si.
StringExpression 
s1~~s2~~… or StringExpression[s1,s2,…]
represents a sequence of strings and symbolic string objects si.
Details
- "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:pattern pattern 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/;cond a pattern for which cond evaluates to True pattern?test a pattern for which test yields True for each character Whitespace a sequence of whitespace characters NumberString the characters of a number DatePattern[spec] the characters of a date charobj an 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" HexadecimalCharacter hexadecimal digit 0-9, a-f, A-F DigitCharacter digit 0–9 LetterCharacter letter WhitespaceCharacter space, newline, tab, or other whitespace character WordCharacter letter or digit Except[p] any character except ones matching p - The following represent positions in strings:
-
StartOfString start of the whole string EndOfString end of the whole string StartOfLine start of a line EndOfLine end of a line WordBoundary boundary 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.
Examples
open all close allBasic Examples (2)
A string expression representing the string "ab" followed by any single character:
"ab" ~~ _This makes a replacement for each occurrence of the string pattern "ab"~~__:
StringReplace["abc abcb abdc", "ab" ~~ _ -> "X"]Give all pairs of identical characters in the string:
StringCases["abbcbccaabbabccaa", x_ ~~ x_]Scope (5)
A single blank (_) stands for any single character:
StringReplace[{"ab", "abc", "abcd"}, "b" ~~ _ -> "X"]Double blank (__) stands for any sequence of one or more characters:
StringReplace[{"ab", "abc", "abcd"}, "b" ~~ __ -> "X"]Triple blank (___) stands for any sequence of zero or more characters:
StringReplace[{"ab", "abc", "abcd"}, "b" ~~ ___ -> "X"]Use AnyOrder to match patterns in any order:
StringMatchQ["4321", AnyOrder["1", "2", "3", "4"]]Assigning a matching AnyOrder to a variable preserves the order in the string:
StringCases["1342 1432", a : AnyOrder["1", "2", "3", "4"] :> a]Applications (1)
Find the primes with four identical digits:
FromDigits /@ Select[IntegerDigits /@ Array[Prime, 1000, 1000000], MatchQ[#, {___, x_, ___, x_, ___, x_, ___, x_, ___}]&]//TimingBy converting to strings, you can use StringMatchQ:
FromDigits /@ Select[IntegerDigits /@ Array[Prime, 1000, 1000000], StringMatchQ[FromCharacterCode[48 + #], StringExpression[___, x_, ___, x_, ___, x_, ___, x_, ___]]&]//TimingProperties & Relations (1)
StringExpression objects can be used in many string manipulation functions:
StringMatchQ["apppbb", "a" ~~ ___ ~~ "b"]StringFreeQ["bcde", "c" ~~ __ ~~ "t"]StringCount["abcadcadcbaac", "a" ~~ _ ~~ "c"]StringCases["a10b6a77a3a#", "a" ~~ DigitCharacter..]StringReplace["aa abcd", WordBoundary ~~ "aa" ~~ WordBoundary -> "XX"]StringReplaceList["abxxabxxabxxabxxab", _ ~~ "ab" ~~ _ -> "X"]StringPosition["abxxabxxabxxabxxab", _ ~~ "ab" ~~ _]StringReplacePart["abxxabxxabxxabxxab", "X", %]Tech Notes
Related Guides
History
Introduced in 2004 (5.1) | Updated in 2007 (6.0) ▪ 2008 (7.0) ▪ 2014 (10.0)
Text
Wolfram Research (2004), StringExpression, Wolfram Language function, https://reference.wolfram.com/language/ref/StringExpression.html (updated 2014).
CMS
Wolfram Language. 2004. "StringExpression." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/StringExpression.html.
APA
Wolfram Language. (2004). StringExpression. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/StringExpression.html
BibTeX
@misc{reference.wolfram_2026_stringexpression, author="Wolfram Research", title="{StringExpression}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/StringExpression.html}", note=[Accessed: 12-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_stringexpression, organization={Wolfram Research}, title={StringExpression}, year={2014}, url={https://reference.wolfram.com/language/ref/StringExpression.html}, note=[Accessed: 12-June-2026]}