2010-12-02 247 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  

所以。 。 。你碰巧感興趣的是哪一種「數字」? :)