Регулярное выражение для извлечения номера телефона из абзаца
Просто фрагмент кода для извлечения номера телефона, если вы считаете, что это вам нужно, вы можете использовать его по лицензии WTFL.
interface PhoneNumberPattern { fun pattern(): Regex fun countryCode(): String } class UsPhoneNumberPattern : PhoneNumberPattern { override fun pattern(): Regex { return Regex("\\b\\d{3}[-.]\\d{3}[-.]\\d{4}\\b") } override fun countryCode(): String { return "US" } } class UkPhoneNumberPattern : PhoneNumberPattern { override fun pattern(): Regex { return Regex("\\b(\\+44|0)\\d{10}\\b") } override fun countryCode(): String { return "UK" } } class ThaiPhoneNumberPattern : PhoneNumberPattern { override fun pattern(): Regex { return Regex("((\\+66|0)(\\d{1,2}\\-?\\d{3}\\-?\\d{3,4}))|((\\+๖๖|๐)([๐-๙]{1,2}\\-?[๐-๙]{3}\\-?[๐-๙]{3,4}))") } override fun countryCode(): String { return "TH" } } class SingaporePhoneNumberPattern : PhoneNumberPattern { override fun pattern(): Regex { return Regex("\\b(\\+65)?\\s?\\d{4}[\\s-]?\\d{4}\\b") } override fun countryCode(): String { return "SG" } } class MixedPhoneNumberPattern : PhoneNumberPattern { override fun pattern(): Regex { return Regex("\\b(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[.-]?\\s?\\d{3}[.-]?\\s?\\d{4}\\b") } override fun countryCode(): String { return "Mixed" } } class PhoneNumberExtractor(private val patterns: List<PhoneNumberPattern>) { fun extractPhoneNumbers(text: String): List<Pair<String, String>> { val phoneNumbers = mutableListOf<Pair<String, String>>() for (pattern in patterns) { pattern.pattern().findAll(text).forEach { matchResult -> phoneNumbers.add(Pair(matchResult.value, pattern.countryCode())) } } return phoneNumbers } } fun main() { val usPattern = UsPhoneNumberPattern() val ukPattern = UkPhoneNumberPattern() val thaiPattern = ThaiPhoneNumberPattern() val sgPattern = SingaporePhoneNumberPattern() val mixedPattern = MixedPhoneNumberPattern() val phoneNumberExtractor = PhoneNumberExtractor(listOf(usPattern, ukPattern, thaiPattern, sgPattern,mixedPattern)) val text = "Potato's phone number is 123-456-7890. " + "Nyan's phone number is +1-555-330-3934. " + "Thet's phone number is (44)02074994340. " + "Ji soo's phone number is 0112345678. " + "Jake Wharton's phone number is +66 123456789. " + "Puppy's phone number is 89228926. " + "Sumail's phone number is +66925387009. " val phoneNumbers = phoneNumberExtractor.extractPhoneNumbers(text) println("Phone numbers found:") phoneNumbers.forEach { println("${it.second} ${it.first.trim()}") } }
В настоящее время это не распространяется на все условия, которые я обновлю в будущем для дополнительного случая.
Текущий результат:
Phone numbers found: US 123-456-7890 US 555-330-3934 UK 02074994340 TH 0207499434 TH 0112345678 TH +66925387009 SG 89228926 Mixed 123-456-7890 Mixed 555-330-3934 Mixed 0112345678
Спасибо, что нашли время прочитать эту статью. Я надеюсь, что мое письмо было информативным и наводящим на размышления.