如何使用正则表达式在数字和字符之间进行拆分?

时间:2010-12-02 21:49:12

标签: regex

我有一个包含工作日和开放时间的字符串,如何使用正则表达式将这些字符串拆分为行?字符串的示例是:

Mån - Tor6:30 - 22:00Fre6:30 - 20:00Lör9:00 - 18:00Sön10:00 - 19:00

我想在较低的字母和数字之间,以及数字和大写字母之间分开

Mån - Tor  
6:30 - 22:00  
Fre  
6:30 - 20:00  
Lör  
9:00 - 18:00  
Sön  
10:00 - 19:00 

提前致谢!

4 个答案:

答案 0 :(得分:8)

拆分

(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)

例如,在C#中:

splitArray = Regex.Split(subjectString, @"(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)");

或在PHP中:

$result = preg_split('/(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)/u', $subject);

或在Java中:

String[] splitArray = subjectString.split("(?<=\\d)(?=\\p{L})|(?<=\\p{L})(?=\\d)");

或Perl:

@result = split(m/(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)/, $subject);

答案 1 :(得分:2)

当且仅当数字是具有\pN属性的代码点时,非编号是缺少所述属性的任何代码点,哪一个为\PN写入。

一些正则表达式方言坚持要求接受那些,如\p{N}\P{N} - 这是一个下铺,但你是你的语言设计师的顽固和弱点,不安全或无知的囚徒。

在那些更具可读性的正则表达方言中,您可以分别以\p{Number}\P{Number}更自由,更易读的方式编写这些方言。

如果您指的是十进制数 与数字相同,则可以将其写为\p{Nd},其补码为{{} 1}}。这些内容的清晰版本为\P{Nd}\p{Decimal_Number}。在某些编程语言中,这就是\P{Decimal_Number}正则表达式简称所代表的含义。

有四种与数字相关的一般类别:

\d

还有许多与数字相关的其他类别:

    Alnum                                    InCommonIndicNumberForms                 Numeric_Type:Numeric                     Numeric_Value:18                         Numeric_Value:38                         Numeric_Value:400                        Numeric_Value:60000
    Bidi_Class:Arabic_Number                 InCountingRodNumerals                    Numeric_Value:0                          Numeric_Value:19                         Numeric_Value:39                         Numeric_Value:500                        Numeric_Value:70000
    Bidi_Class:European_Number               InCuneiformNumbersAndPunctuation         Numeric_Value:NaN                        Numeric_Value:20                         Numeric_Value:40                         Numeric_Value:600                        Numeric_Value:80000
    Block:Aegean_Numbers                     InEnclosedAlphanumerics                  Numeric_Value:1                          Numeric_Value:21                         Numeric_Value:41                         Numeric_Value:700                        Numeric_Value:90000
    Block:Ancient_Greek_Numbers              InEnclosedAlphanumericSupplement         Numeric_Value:2                          Numeric_Value:22                         Numeric_Value:42                         Numeric_Value:800                        Numeric_Value:100000
    Block:Common_Indic_Number_Forms          InMathematicalAlphanumericSymbols        Numeric_Value:3                          Numeric_Value:23                         Numeric_Value:43                         Numeric_Value:900                        Numeric_Value:100000000
    Block:Counting_Rod_Numerals              InNumberForms                            Numeric_Value:4                          Numeric_Value:24                         Numeric_Value:44                         Numeric_Value:1000                       Numeric_Value:1000000000000
    Block:Cuneiform_Numbers_And_Punctuation  InRumiNumeralSymbols                     Numeric_Value:5                          Numeric_Value:25                         Numeric_Value:45                         Numeric_Value:2000                       Other_Number
    Block:Enclosed_Alphanumeric_Supplement   Letter_Number                            Numeric_Value:6                          Numeric_Value:26                         Numeric_Value:46                         Numeric_Value:3000                       PosixAlnum
    Block:Enclosed_Alphanumerics             Line_Break:Infix_Numeric                 Numeric_Value:7                          Numeric_Value:27                         Numeric_Value:47                         Numeric_Value:4000                       Sentence_Break:Numeric
    Block:Mathematical_Alphanumeric_Symbols  Line_Break:Numeric                       Numeric_Value:8                          Numeric_Value:28                         Numeric_Value:48                         Numeric_Value:5000                       Word_Break:ExtendNumLet
    Block:Number_Forms                       Line_Break:Postfix_Numeric               Numeric_Value:9                          Numeric_Value:29                         Numeric_Value:49                         Numeric_Value:6000                       Word_Break:MidNum
    Block:Rumi_Numeral_Symbols               Line_Break:Prefix_Numeric                Numeric_Value:10                         Numeric_Value:30                         Numeric_Value:50                         Numeric_Value:7000                       Word_Break:MidNumLet
    Decimal_Number                           Number                                   Numeric_Value:11                         Numeric_Value:31                         Numeric_Value:60                         Numeric_Value:8000                       Word_Break:Numeric
    General_Category:Decimal_Number          Numeric_Type:De                          Numeric_Value:12                         Numeric_Value:32                         Numeric_Value:70                         Numeric_Value:9000                       XPosixAlnum
    General_Category:Letter_Number           Numeric_Type:Decimal                     Numeric_Value:13                         Numeric_Value:33                         Numeric_Value:80                         Numeric_Value:10000                      
    General_Category:Number                  Numeric_Type:Di                          Numeric_Value:14                         Numeric_Value:34                         Numeric_Value:90                         Numeric_Value:20000                      
    General_Category:Other_Number            Numeric_Type:Digit                       Numeric_Value:15                         Numeric_Value:35                         Numeric_Value:100                        Numeric_Value:30000                      
    InAegeanNumbers                          Numeric_Type:None                        Numeric_Value:16                         Numeric_Value:36                         Numeric_Value:200                        Numeric_Value:40000                      
    InAncientGreekNumbers                    Numeric_Type:Nu                          Numeric_Value:17                         Numeric_Value:37                         Numeric_Value:300                        Numeric_Value:50000       

因此。 。 。您碰巧对哪种特殊的“数字”感兴趣? :)

答案 2 :(得分:1)

这适用于ruby:(\D+)(\d+:\d+ - \d+:\d+)

您在Rubular上的示例:http://rubular.com/r/0XqCYmNdnJ

答案 3 :(得分:0)

如果您搜索([a-z])(\d)并将其替换为$1\n$2,它应该有效,但如果不了解您的编程语言和环境,则很难直接给您答案。