Use base conversion
This answer was to a question which wanted ASCII art which consisted of the characters + |-
and newlines. Since there are only 5 possible characters, these can be treated as a base 5 number and converted to bytes, packing 3.45 characters per byte.
Exploit regularities
Often, the data will have some regularities, even if those regularities aren't strong enough to employ specific tools such as mirroring. For instance, in the above question, the desired output had newlines roughly evenly spaced throughout the test, since the text was roughly rectangular. I exploited this to shorten my code, by using Pyth's split into n pieces function, then joining on newlines.
Know your tools, and choose the right one for the job.
The most powerful and efficient text processing tools I know are:
Regex engines: ///
, Retina, Perl, in order of power/conciseness tradeoff.
Use if the thing you want to do can be conscisely described in regex substitutions, such as this answer
Obscure text-processing tools: gema, etc. (I'm sure there are others, but they're too obscure)
Use if they have a feature that is exactly what you need, that nothing else has. Such as in this question, with gema's recursive matching.
General code golfing languages: CJam, Pyth, etc.
Use if you're exploiting some subtlety complex enough that no other tool will do the job or it just does the job shorter.
Try many approaches
This applies in every code-golf question, but especially here. You're not going to know whether a regularity is exploitable until you try it out. Possibly in multiple languages.