13

I have a string which contains numbers. Is it feasible only with XPath that I get only numbers from it?

For example: myString="abcd12ef34gh567", result: 1234567

0

2 Answers 2

17

Use:

translate(., translate(.,'0123456789',''), '')

This is the so called "double-translate" method, first proposed by @Michael Kay and can be used both in XPath 1.0 and in XPath 2.0.

Of course, in XPath 2.0 using RegeX will generally be more efficient:

replace('abc123def590xyz', '[^\d]', '')
Sign up to request clarification or add additional context in comments.

1 Comment

+1, "double-translate" very skilful solution. Regex improvement: \D
2

If you can guarantee that the non-digit characters will be only lower-case letters (like in your example), you could do the following in XPath 1:

translate($myString, 'abcdefghijklmnopqrstuvwxyz', '')

You can add other characters to the alphabet string as necessary.

In XPath 2, you could use a regex:

replace($myString, '[^0-9]', '')

1 Comment

@_James_Sulak: It isn't necessary to know in advance the set of non-numeric characters -- see my answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.