我有一个包含工作日和开放时间的字符串,如何使用正则表达式将这些字符串拆分为行?字符串的示例是:
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
提前致谢!
答案 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
,它应该有效,但如果不了解您的编程语言和环境,则很难直接给您答案。