我有一个包含工作日和营业时间的字符串,如何使用正则表达式将其拆分成行?以下是一个字符串示例:
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
提前感谢您!
我有一个包含工作日和营业时间的字符串,如何使用正则表达式将其拆分成行?以下是一个字符串示例:
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
提前感谢您!
拆分
(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)
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)");
@result = split(m/(?<=\d)(?=\p{L})|(?<=\p{L})(?=\d)/, $subject);
\p{N}
来替换 \d
以保持一致性。 - Tim Pietzcker只有当一个数字具有\pN
属性时,非数字才是缺乏该属性的任何代码点,这可以用\PN
来表示。
一些正则表达式方言坚持采用\p{N}
或\P{N}
来表示这些,这是不正确的,但你受制于你的语言设计者的怪癖、不安全因素或无知。
在那些更易读的正则表达式方言中,你可以以更自由和更易读的方式编写它们,分别为\p{Number}
和\P{Number}
。
如果你指的是十进制数,它与数字不同,你可以将其写为\p{Nd}
,因此它的补集为\P{Nd}
。这些的易读版本是\p{Decimal_Number}
和\P{Decimal_Number}
。在一些编程语言中,这就是\d
正则表达式方便缩写所代表的含义。
与数字相关的有四个一般类别:
N Number
Nd Decimal_Number (also Digit)
Nl Letter_Number
No Other_Number
还有许多与数字相关的其他类别:
字母数字字符 印度数字形式 数字类型:数字 数值:18 数值:38 数值:400 数值:60000 右至左类别:阿拉伯数字 竹简数字 数值:0 数值:19 数值:39 数值:500 数值:70000 右至左类别:欧洲数字 楔形文字数字和标点符号 数值:NaN 数值:20 数值:40 数值:600 数值:80000 区块:爱琴海数字 封闭字母数字 数值:1 数值:21 数值:41 数值:700 数值:90000 区块:古希腊数字 封闭字母数字补充 数值:2 数值:22 数值:42 数值:800 数值:100000 区块:常用印度数字形式 数学字母数字符号 数值:3 数值:23 数值:43 数值:900 数值:100000000 区块:计数棒数字 数字形式 数值:4 数值:24 数值:44 数值:1000 数字 区块:楔形文字数字和标点符号 鲁米数字符号 数值:5 数值:25 数值:45 数值:2000 其他数字 区块:封闭字母数字补充 字母数字 数值:6 数值:26 数值:46 数值:3000 PosixAlnum 区块:封闭字母数字 断词线:中缀数字 数值:7 数值:27 数值:47 数值:4000 句子断点:数字 区块:数学字母数字符号 断词线:数字 数值:8 数值:28 数值:48 数值:5000 单词断点:扩展数字字母 区块:数字形式 断词线:后缀数字 数值:9 数值:29 数值:49 数值:6000 单词断点:中间数字 区块:鲁米数字符号 断词线:前缀数字 数值:10 数值:30 数值:50 数值:7000 单词断点:中间数字字母 十进制数字 数字 数值:11 数值:31 数值:60 数值:8000 单词断点:数字 通用类别:十进制数字 数字类型:十进制 数值:12 数值:32 数值:70 数值:9000 XPosixAlnum 通用类别:字母数字 数字类型:十进制数字 数值:13 数值:33 数值:80 数值:10000 通用类别:数字 数字类型:数位 数值:14 数值:34 数值:90 数值:20000 通用类别:其他数字 数字类型:数字 数值:15 数值:35 数值:100 数值:30000 爱琴海数字 数字类型:无 数值:16 数值:36 数值:200 数值:40000 古希腊数字 数字类型:Nu 数值:17 数值:37 数值:300 数值:50000所以,您对哪种特定类型的“数字”感兴趣呢? :)
这段代码在 Ruby 中可行:(\D+)(\d+:\d+ - \d+:\d+)
您可以在 Rubular 上查看示例:http://rubular.com/r/0XqCYmNdnJ
([a-z])(\d)
并将其替换为 $1\n$2
,它应该可以工作。但是,由于不知道你的编程语言和环境,很难直接给出答案。