2

Python の re モジュールを使用して、差分 (統一形式) を各セクションに分割しようとしています。差分のフォーマットはこんな感じです...

diff --git a/src/core.js b/src/core.js
index 9c8314c..4242903 100644
--- a/src/core.js
+++ b/src/core.js
@@ -801,7 +801,7 @@ jQuery.extend({
        return proxy;
    },

-   // Mutifunctional method to get and set values to a collection
+   // Multifunctional method to get and set values of a collection
    // The value/s can optionally be executed if it's a function
    access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
        var exec,
diff --git a/src/sizzle b/src/sizzle
index fe2f618..feebbd7 160000
--- a/src/sizzle
+++ b/src/sizzle
@@ -1 +1 @@
-Subproject commit fe2f618106bb76857b229113d6d11653707d0b22
+Subproject commit feebbd7e053bff426444c7b348c776c99c7490ee
diff --git a/test/unit/manipulation.js b/test/unit/manipulation.js
index 18e1b8d..ff31c4d 100644
--- a/test/unit/manipulation.js
+++ b/test/unit/manipulation.js
@@ -7,7 +7,7 @@ var bareObj = function(value) { return value; };
 var functionReturningObj = function(value) { return (function() { return value; }); };

 test("text()", function() {
-   expect(4);
+   expect(5);
    var expected = "This link has class=\"blog\": Simon Willison's Weblog";
    equal( jQuery("#sap").text(), expected, "Check for merged text of more then one element." );

@@ -20,6 +20,10 @@ test("text()", function() {
        frag.appendChild( document.createTextNode("foo") );

    equal( jQuery( frag ).text(), "foo", "Document Fragment Text node was retreived from .text().");
+
+   var $newLineTest = jQuery("<div>test<br/>testy</div>").appendTo("#moretests");
+   $newLineTest.find("br").replaceWith("\n");
+   equal( $newLineTest.text(), "test\ntesty", "text() does not remove new lines (#11153)" );
 });

 test("text(undefined)", function() {
diff --git a/version.txt b/version.txt
index 0a182f2..0330b0e 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-1.7.2
\ No newline at end of file
+1.7.3pre
\ No newline at end of file

次のパターンの組み合わせを試しましたが、うまくいきません。今までで一番近かった…

re.compile(r'(diff.*?[^\rdiff])', flags=re.S|re.M)

しかし、これは

['diff ', 'diff ', 'diff ', 'diff ']

この差分のすべてのセクションを一致させるにはどうすればよいですか?

4

4 に答える 4

1

正規表現を使用する必要はありません。ファイルを分割するだけです。

diff_file = open('diff.txt', 'r')
diff_str = diff_file.read()
diff_split = ['diff --git%s' % x for x in diff_str.split('diff --git') \
              if x.strip()]
print diff_split
于 2012-05-06T16:55:36.187 に答える
1

これはそれを行います:

r=re.compile(r'^(diff.*?)(?=^diff|\Z)', re.M | re.S)
for m in re.findall(r, s):
    print '===='
    print m
于 2012-05-06T17:00:56.940 に答える
0

なぜ正規表現を使用しているのですか? 行を反復して、行が で始まるときに新しいセクションを開始するのはdiffどうですか?

list_of_diffs = []
temp_diff = ''
for line in patch:
    if line.startswith('diff'):
        list_of_diffs.append(temp_diff)
        temp_diff = ''
    else: temp_diff.append(line)

免責事項、上記のコードは単なる例示的な擬似コードと見なされるべきであり、実際に実行されることは想定されていません。

正規表現はハンマーですが、問題は釘ではありません。

于 2012-05-06T16:48:06.820 に答える
0

単語が続く改行で分割するだけですdiff:

result = re.split(r"\n(?=diff\b)", subject)

ただし、安全のために、おそらく一致させるか、\rまたは\r\n同様にする必要があります。

result = re.split(r"(?:\r\n|[\r\n])(?=diff\b)", subject)
于 2012-05-06T17:17:12.790 に答える