我正在使用字符串。替换
以替换子字符串 A
func removeIP(text string) string {
text = strings.Replace(text, "someWord", "**NewWord**", -1)
return text
}
func removeIPUsingRegex(text string) string {
var re = regexp.MustCompile(`\b` + "someWord" + `\b`) // I want to replace whole word only
text = re.ReplaceAllString(text, "**NewWord**")
}
我现在面临的问题是,只有在字符串替换不支持的情况下,我才想要替换整个单词。< br >因为我必须替换非常非常大的字符串,可能以GB为单位。与字符串替换相比,正则表达式非常慢。< br >例如:text: "abcdef defgh /def/。def/ =def= def xxxy"
-
正则表达式将时间缩短了近 100 倍(https://medium.com/codezillas/golang-replace-vs-regexp-de4e48482f53)。任何想法将不胜感激。
KMP算法使用
//ReplaceWholeWord…
func ReplaceWholeWord(text string, oldWord string, newWord string) string {
var patternLength = len(oldWord)
var textLength = len(text)
var copyIndex = 0
var textIndex = 0
var patternIndex = 0
var newString strings.Builder
var lps = computeLPSArray(oldWord)
for textIndex < textLength {
if oldWord[patternIndex] == text[textIndex] {
patternIndex++
textIndex++
}
if patternIndex == patternLength {
startIndex := textIndex - patternIndex
endIndex := textIndex - patternIndex + patternLength - 1
if checkIfWholeWord(text, startIndex, endIndex) {
if copyIndex != startIndex {
newString.WriteString(text[copyIndex:startIndex])
}
newString.WriteString(newWord)
copyIndex = endIndex + 1
}
patternIndex = 0
textIndex = endIndex + 1
} else if textIndex < textLength && oldWord[patternIndex] != text[textIndex] {
if patternIndex != 0 {
patternIndex = lps[patternIndex-1]
} else {
textIndex = textIndex + 1
}
}
}
newString.WriteString(text[copyIndex:])
return newString.String()
}
func computeLPSArray(pattern string) []int {
var length = 0
var i = 1
var patternLength = len(pattern)
var lps = make([]int, patternLength)
lps[0] = 0
for i = 1; i < patternLength; {
if pattern[i] == pattern[length] {
length++
lps[i] = length
i++
} else {
if length != 0 {
length = lps[length-1]
} else {
lps[i] = length
i++
}
}
}
return lps
}
func checkIfWholeWord(text string, startIndex int, endIndex int) bool {
startIndex = startIndex - 1
endIndex = endIndex + 1
if (startIndex < 0 && endIndex >= len(text)) ||
(startIndex < 0 && endIndex < len(text) && isNonWord(text[endIndex])) ||
(startIndex >= 0 && endIndex >= len(text) && isNonWord(text[startIndex])) ||
(startIndex >= 0 && endIndex < len(text) && isNonWord(text[startIndex]) && isNonWord(text[endIndex])) {
return true
}
return false
}
func isNonWord(c byte) bool {
return !((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c == '_'))
}
Change is inevitable, except from vending machines. — Robert C. Gallagher Puppet 的 regsubst 函数提供了一种处理文本的简单方法, 用于在字符串中查找和替换,或者从字符串提取匹配的模式。 例如,我们通常需要对从 facter 或者从外部程序获得的数据做这样的处理。 在本例中将会看到如何使用 regsubst 提
问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。
通过好奇心,有没有办法用Java Stream编写它?
问题内容: 我已将一些定价数据读入pandas数据框中,其值显示为: 我想将其简化为数字值。我知道我可以遍历并应用正则表达式 到每个字段,然后将结果列表重新组合在一起,但是有没有一种循环的方式? 谢谢 问题答案: 您可以使用删除所有非数字: regex101演示
假设我有以下字符串 在所有应用程序上使用regex,是否有可能 i、 e.替换包含单词的模式的正则表达式,例如,从上面的被
问题内容: 我有这个字符串: 现在,我想在每个数字之前添加String num:。 因此结果必须是: 这也必须工作: 用于搜索数字的正则表达式是:[0-9]+ 但是我想用num:+ [匹配的子字符串]替换匹配的子字符串。 我现在写了一个带有数字的示例,但另一个示例可以是:在每个电子邮件地址之前添加 ·Email found·: 问题答案: 利用分组。您可以使用括号(并)定义组,并通过组索引$n在哪