我有一些长而变长的文本,这些文本分为********************
标记的部分。我需要将这些文本发布到仅接受2048个字符的字段中,因此我需要将该文本分为不超过2048个字符但不包含不完整部分的组。
到目前为止,我的正则表达式为^([\s\S]{1,2048})([\s\S]{1,2048})([\s\S]{1,2048})
但是,这有两个问题:
1)它将文本分为几组,其中可以包括不完整的部分。我想要的是一个完整的部分,即使它不是完整的2048个字符也是如此。假定下面的示例在2048个字符的结尾。
这是我的实际结果。请注意,“ 7分钟锻炼”部分已从中间部分截去
********************
Maybe Baby™ Period & Fertility (?)
Popular app for tracking your periods and predicting times of fertility; recommended; avg 4.5/5 stars (3,500+ ratings); 50% off, $3.99 ↘️ $1.99!
https://example.com/2019/07/29/maybe-baby-period-fertility-7-29-19/
********************
7 Minute Workout: Lose Weight (?)
Scientifically-proven and featured by the New York Times, a 7-minute high intensity workout proven to lose weig
这是我想要的结果。请注意,“ 7分钟锻炼”部分被完全省略了,因为当它保持在2048个字符的限制内时,不能完全包括在内。
********************
Maybe Baby™ Period & Fertility (?)
Popular app for tracking your periods and predicting times of fertility; recommended; avg 4.5/5 stars (3,500+ ratings); 50% off, $3.99 ↘️ $1.99!
https://example.com/2019/07/29/maybe-baby-period-fertility-7-29-19/
2)这个正则表达式的第二个问题是我需要输入的文本长度变化很大;可能小于2048,也可能超过10,000个字符。我的正则表达式显然仅适用于最长6144个字符的文本。我只是不断地重复复制正则表达式一次,以获得比我可以输入的最长文本更长的时间,还是有办法重复它?
附录:一些人询问了此问题的用例/环境。不,这不是垃圾邮件bot。相反,我正在尝试使用Apple的快捷方式应用程序将网站上的项目交叉发布到Kik上的关注者。不幸的是,Kik的字符数上限为2048个,因此我无法一次发布所有字符。我正在尝试使用正则表达式将文本分成适当的部分,以便可以从快捷方式复制文本并将其一次粘贴到Kik中。
答案 0 :(得分:0)
夫妇注释:
根本不需要使用组,只需直接使用比赛结果即可,因为每个比赛代表一个分区。
通过在?
之后添加{1,2048}
来使匹配在正确的位置进行切割,从而使用惰性量词而不是贪婪。
在我的正则表达式中,我只使用了全局g
,而没有使用多行m
。
以下代码仅适用于2048个字符以下的部分。如果该部分的字符数超过2048个,则会被跳过。
下面的正则表达式使用正向超前来表示该部分的末尾而不匹配。
这是正则表达式:
^|\*[\s\S]{1,2048}?(?=\n\*|$)
示例:https://regex101.com/r/hezvu5/1/
====更新====
要使结果贪婪,以匹配尽可能多的部分而不拆分最后一部分,请使用此正则表达式:
^|\*[\s\S]{1,2048}(?=\n\*|$)