我比較兩個字符串,我怎麼能得到的字符串,沒有這兩個如何使用TCL獲得無與倫比的字符串部分?
1
A
回答
2
之間的匹配這是一個有趣的問題,需要一個最長公共子算法的一部分。 Tcl已經在Tcllib中獲得了其中一個,但它是用於列表的。幸運的是,我們可以將字符串轉換成字符的列表,split
:
package require struct::list
set a "the quick brown fox"
set b "the slow green fox"
set listA [split $a ""]; set lenA [llength $listA]
set listB [split $b ""]; set lenB [llength $listB]
set correspondences [struct::list longestCommonSubsequence $listA $listB]
set differences [struct::list lcsInvertMerge $correspondences $lenA $lenB]
現在我們可以說沒有從differences
是挑選部分匹配的零件added
,changed
或deleted
:
set common {}
set unmatchedA {}
set unmatchedB {}
foreach diff $differences {
lassign $diff type rangeA rangeB
switch $type {
unchanged {
lappend common [join [lrange $listA {*}$rangeA] ""]
}
added {
lappend unmatchedB [join [lrange $listB {*}$rangeB] ""]
}
changed {
lappend unmatchedA [join [lrange $listA {*}$rangeA] ""]
lappend unmatchedB [join [lrange $listB {*}$rangeB] ""]
}
deleted {
lappend unmatchedA [join [lrange $listA {*}$rangeA] ""]
}
}
}
puts common->$common
# common->{the } ow {n fox}
puts A->$unmatchedA
# A->{quick br}
puts B->$unmatchedB
# B->sl { gree}
在這種情況下,我們看到下面的對應(.
是我插入幫線東西間隔):
the quick br..ow.....n fox the ........slow green fox
無論這是否正是你想要的,我不知道(並且在計算的差異中有更多的細節;他們只是有點難以閱讀)。如果這更符合您的口味,您可以輕鬆切換爲逐字對應。它非常簡單,只是去掉split
和join
...
1
如果你有一個字符串,要刪除一個固定的字符串,例如
set str "this is a larger? string"
set substr "a larger?"
然後,你可以這樣做:
set parts [split [string map [list $s2 \uffff] $s1] \uffff]
# returns the list: {this is } { string}
全局用單個字符替換較大字符串中的子字符串,然後將結果拆分爲相同的字符。
相關問題
- 1. 從正則表達式中獲得無與倫比的字符串(Android)
- 2. Tcl從字符串中獲取部分
- 3. 如何獲得一部分字符串?
- 4. 如何比較一部分MySQL字符串與PHP字符串?
- 5. 基於未知模式匹配無與倫比的字符串
- 6. 如何獲取無與倫比的關鍵字?
- 7. 使用php比較部分字符串
- 8. 比較數組的字符串,打造無與倫比的列表
- 9. 如何比較部分字符串?
- 10. 比較字符串1的部分與第二個字符串
- 11. 無與倫比的查詢
- 12. egrep的:無與倫比(或\(
- 13. 比較部分字符串
- 14. 部分字符串對比
- 15. 如何獲得URL具有無可比擬的字符串
- 16. 如何獲取字符串的部分
- 17. 獲得無與倫比的記錄,而不使用Oracle減去除了不
- 18. jquery - 如何獲得substr的字符串的一部分?
- 19. Tcl:如何將空字符串分割爲字符串
- 20. PHP使用&作爲字符串的一部分獲得方法
- 21. 如何獲得對象的某個部分作爲字符串
- 22. 如何獲得一個字符串在PHP中的一部分?
- 23. 如何獲得字符串的一部分
- 24. 如何獲得在bash中字符串的第一部分
- 25. 我如何獲得字符串的某個部分?
- 26. 如何獲得以下字符串的一部分?
- 27. 在Clojurescript中,我如何獲得UUID的字符串部分?
- 28. 如何獲取部分字符串
- 29. 我不斷收到錯誤:無與倫比的類型:int和字符串
- 30. 如何使用perl獲取字符串的子部分?
您正在尋找差異化算法。這裏有幾個實現:http://wiki.tcl.tk/3108 – slebetman
我的答案是基於該頁面的信息大綱; Tcllib擁有解決方案(正如它經常這樣做,只要你能找到它)。 –