2010-12-02 249 views
4

我有一个字符串包含工作日和开放时间,如何将它们分成使用正则表达式的行?字符串的一个例子是:如何使用正则表达式分割数字和字符?

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 

谢谢!

+1

什么语言? python,ruby,sed? – Peter 2010-12-02 21:51:39

+0

有人请格式化他的代码:) – jordanbtucker 2010-12-02 21:54:52

+3

@Peter - 看起来像瑞典语。 – eumiro 2010-12-02 22:04:00

回答

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); 
0

如果您搜索([a-z])(\d)$1\n$2它应该工作代替它,但不知道你的编程语言和环境,这是很难给你一个直接的答案。

2

当且仅当一个数是一个代码点与\pN属性,比nonnumber是缺乏所述属性,其中一个写入\PN任何代码点。

一些正则表达式方言pusillanimously坚持拥抱那些,如\p{N}\P{N} - 这是废话,但你是你的语言设计者的率性和弱点,不安全感或无知的囚犯。

在那些更具可读性的弯曲正则表达式中,您可以使用更自由且更清晰的方式编写这些方言,分别为\p{Number}\P{Number}

如果你说的是十进制数,这是同一个号码,你可以写为\p{Nd},与它的补因此\P{Nd}。这些清晰的版本是\p{Decimal_Number}\P{Decimal_Number}。在某些编程语言中,这是正则表达式便利缩写代表的内容。

有相关数字四大类:

 N   Number 
     Nd   Decimal_Number (also Digit) 
     Nl   Letter_Number 
     No   Other_Number 

,并有相关的数字众多其他类别:

 
    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  

所以。 。 。你碰巧感兴趣的是哪一种“数字”? :)