我有以下字符串将在较大的字符串中重复出现:
[SM_g]word[SM_h].[SM_l] "
注意短语" [SM_g]字[Sm_h]"之后的字符串。有三个组成部分:
"
所有这三个组件中的零到将始终出现在" [SM_g]字[SM_h]"之后。但是,它们也可以在" [SM_g]字[SM_h]"之后以任何顺序出现。例如,字符串也可以是:
[SM_g]word[SM_h][SM_l]"
或
[SM_g]word[SM_h]"[SM_l].
或
[SM_g]word[SM_h]".
或
[SM_g]word[SM_h][SM_1].
或
[SM_g]word[SM_h].
或只是
[SM_g]word[SM_h]
这些只是一些例子。关键是有三个不同的组件(如果您认为句点也可以是逗号,则更多)可以出现在" [SM_h] word [SM_g]"这三个组件可以按任何顺序和,有时一个,两个或所有三个组件都将丢失。
不仅如此,有时候在#34;之前会有一个空格。和前一个组件/ [SM_g]字[SM_h]。
例如:
[SM_g]word[SM_h] ".
或
[SM_g]word[SM_h][SM_l] ".
等。等
我试图通过移动核心字符串中的三个组件来处理这个字符串(并保留空格,以防在& \ quot之前有空格和前一个组件/ [SM_g]字[ SM_h])。
例如,[SM_g]word[SM_h].[SM_l]"
会变成
[SM_g]word.[SM_l]"[SM_h]
或
[SM_g]word[SM_h]"[SM_l].
会变成
[SM_g]word"[SM_l].[SM_h]
或者,模拟在"
之前有空格
[SM_g]word[SM_h] ".
会变成
[SM_g]word ".[SM_h]
等等。
我已经尝试了几种正则表达式的组合,但没有一种能有效。
有人有建议吗?
答案 0 :(得分:1)
如果有必要,您需要将每个组件放在一个分组构造的替换中,最大匹配尝试为3
:
\[SM_g]word(\[SM_h])((?:\.|\[SM_l]| ?"){0,3})
如果word
不是常量或特定关键字,则可以将.*?
替换为$1$3$2
。
然后在替换字符串中你应该这样做:
var re = /(\[SM_g]word)(\[SM_h])((?:\.|\[SM_l]| ?"){0,3})/g;
var str = `[SM_g]word[SM_h][SM_l] ".`;
console.log(str.replace(re, `$1$3$2`));
func sortMediaToCategories(media items: [StoryData.Items], success: @escaping (() -> Void), failure: @escaping (() -> Void)) {
let group = DispatchGroup()
for item in items {
if item.media_type == 1 {
guard let url = URL(string: (item.image_versions2?.candidates?.first!.url)!) else { break }
group.enter()
mediaToStorageDistribution(withImageUrl: url,
videoUrl: nil,
mediaType: .jpg,
takenAt: item.taken_at,
success: { group.leave() },
failure: {
print("error")
group.leave()
})
}
}
group.notify(queue: .main) {
self.collectionView.reloadData()
}
}

答案 1 :(得分:0)
这似乎适用于您的流程,换句话说,changing sub-string position
。
(\[SM_g])([^[]*)(\[SM_h])((?=([,\.])|(\[SM_l])|( ?&\\?quot;)).*)?
Demo ,,,分别为capture group
每个post processing
捕获所有子字符串。
[SM_g]
被捕获到群组1
,word
群组2
,[SM_h]
群组3
和{{1}字符串将} all trailing part
,4
分组到[,\.]
,5
分组到[SM_l]
," 6
"分组?&\\?quot;
。
因此,组7
为1~3
,组core part
为4
,用于检查尾随部分是否存在,而组trailing part
为5~7
为你的后期处理。
因此,您可以按照sub-parts of group4
的顺序轻松匹配字符串position changed output string
,如下所示。
replacing with captured groups
要在Javascript中替换,请参阅此帖子。 JS Regex, how to replace the captured groups only?
但是上面的正则表达式不够精确,因为它可能允许任何\1\2\7\3 or $1$2$7$3 etc..
尾随字符串,例如repeatitions of the sub-part
或\1\2\3\5\5\5\5
等。
为避免这种情况,需要采用只接受尾随字符串的子部分\1\2\3\6\7\7\7\7\5\5\5
的条件。请参考这个例子。 https://regex101.com/r/6aM4Pv/1/表示订单中可能的combinations
。
但是如果正则表达式采用combinations
的条件,正则表达式会更复杂,所以我留下上面简化的正则表达式来帮助你理解它。谢谢: - )